Spring 3.2.3バインディングパラメータbug
2270 ワード
今朝問題を見ました。http://www.iteye.com/problems/95447
書き記す
HTTP ERROR 400
Problem accessing/es-web/monitor.Reason:
Required Long parameter'userId'is not present
パワードby Jetty://
spring 3.2.3以前のバージョンは大丈夫です。
spring 3.2.3はちょっと変わったところがあります。
そのorg.springframe ework.web.method.annotations.Abstract NamedValueMethodAgMentResoloverのresoveAgAgment方法において:
したがって、以下のコードパラメータがあるかどうかにかかわらず、必要です。
@Request Param(value="username",required=false)
これはバグです。ジラを提出しました
https://jira.springsource.org/browse/SPR-10592
@Controller
public class ExampleController {
@RequestMapping("/index")
public String index(Long id) {
System.out.println(id);
return "index";
}
}
スプリング3.2.3を使用する場合は、ブラウザで入力します。http://localhost/index?id= 以下のエラーを報告します。書き記す
HTTP ERROR 400
Problem accessing/es-web/monitor.Reason:
Required Long parameter'userId'is not present
パワードby Jetty://
spring 3.2.3以前のバージョンは大丈夫です。
spring 3.2.3はちょっと変わったところがあります。
そのorg.springframe ework.web.method.annotations.Abstract NamedValueMethodAgMentResoloverのresoveAgAgment方法において:
Object arg = resolveName(namedValueInfo.name, parameter, webRequest);
if (arg == null) {
if (namedValueInfo.defaultValue != null) {
arg = resolveDefaultValue(namedValueInfo.defaultValue);
}
else if (namedValueInfo.required) {
handleMissingValue(namedValueInfo.name, parameter);
}
arg = handleNullValue(namedValueInfo.name, arg, paramType);
}
else if ("".equals(arg) && (namedValueInfo.defaultValue != null)) {
arg = resolveDefaultValue(namedValueInfo.defaultValue);
}
boolean emptyArgValue = "".equals(arg);
if (binderFactory != null) {
WebDataBinder binder = binderFactory.createBinder(webRequest, null, namedValueInfo.name);
arg = binder.convertIfNecessary(arg, paramType, parameter);
}
if (emptyArgValue && (arg == null)) {
handleMissingValue(namedValueInfo.name, parameter);
}
handleResolvedValue(arg, namedValueInfo.name, parameter, mavContainer, webRequest);
return arg;
nullを処理するコードを追加しましたが、handleMissingValueはデフォルトでは投げ異常です。if (emptyArgValue && (arg == null)) {
handleMissingValue(namedValueInfo.name, parameter);
}
ただし、前のバージョンはこの状況を処理しません。したがって、以下のコードパラメータがあるかどうかにかかわらず、必要です。
@Request Param(value="username",required=false)
これはバグです。ジラを提出しました
https://jira.springsource.org/browse/SPR-10592