Spring MVC @RequestParam DefaultValue没有为具有emptyvalue的参数设置

时间:2014-08-11 10:15:52

标签: java spring-mvc

我正在调用URL并发送参数,如下所示 -

 http://india.webinc.in:8080/caseManagement/caseView?lock=false&caseId= 

它进入了Spring MVC的控制器方法 -

@RequestMapping(value = "/caseView", method = RequestMethod.GET)
public String caseView(
final HttpServletRequest request,   
@RequestParam(value = "caseId", defaultValue = "-1") final Integer caseId
){
System.out.println("request.getparameter(caseId)::" + request.getParameter("caseId"));
System.out.println("@RequestParam caseId::" + caseId);
if (caseId != -1) {
//do something
} else {
//do something else
} 
} 

并在控制台中生成如下结果 -

request.getparameter(caseId)::
@RequestParam caseId::null
java.lang.NullPointerException

现在根据doc的默认值可以在请求参数值为空时用作后备,那么可能是什么原因可能是空caseId未设置为-1?

  

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html   
“当未提供请求参数值或为空时,用作后备的默认值。”

对于解决方案,我已经从url中排除了这个caseId参数,但我很想知道RequestParam的defalut行为。

1 个答案:

答案 0 :(得分:0)

  

现在根据doc的默认值可以在请求参数值为空时用作后备,那么可能是什么原因可能是空caseId未设置为-1?

似乎只要请求的查询参数中存在caseId param,就会将提供视为""的值,因此你遇到的结果。

  

提供或清空

Spring文档的一部分可能会令人困惑,但这是另一个相同行为的示例:Is it possible to have empty RequestParam values use the defaultValue?