在我的控制器中,我有String参数,包含一些id,不应该是空字符串的null。我想知道,有没有办法在@RequestMapping参数中检查它是不是空字符串? 我试图以某种方式解决它
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
@RequestMapping(value = someURL, params = {"!id=\"\""})
public SomeResponse doSomething(@RequestParam(required = true) String id)
没有成功。
据我了解,params = {"id"}
和@RequestParam(required = true)
只能检查请求中是否显示参数id
(!= null)。
我很可能需要使用控制器boby中的代码来检查它,例如
if (id == null || id.isEmpty()) {
return someErrorResponse;
}
但如果我错了,请纠正我。 提前谢谢。
P.S。我的应用程序在Apache Tomcat 7.0.62容器中的Java 1.7 SE上运行
答案 0 :(得分:9)
如果您希望与验证的Java EE兼容,请使用@Size(min=1)
。
Hibernate Validator具有@NotEmpty
注释用于此目的。但这不是Java规范的一部分。
BTW,保持required=true
如上所述,通知不会强制请求中存在param。
EDIT对评论的反应:
Spring符合Java EE Validation,因此如果您在类路径上有一些Java EE验证API implmentor,则@Size注释应该有效。到目前为止我只使用了hibernate验证器。因此,您可以通过将其添加到类路径中来启用这些验证功能:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.1.Final</version>
</dependency>
,您可以使用@Validated
注释对控制器进行注释,并执行以下操作:
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) @Size(min=1) String id)
您还可以自定义将发送给客户端的错误消息。
如果您不熟悉Java EE验证,我建议您开始研究它,因为如果您正在创建REST / HTTP端点,这非常重要。它将为您打开新的世界。
答案 1 :(得分:9)
根据使用该注释的Spring代码
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
这样的事情应该有效:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
答案 2 :(得分:-4)
您可以在
中使用defaultValue
@RequestParam(value = "id", required = true, defaultValue = "-1") String id
但是,你必须再次使用if
if(id.equals("-1")){
return "someErrorPage"
}
否则,您可以为此目的创建过滤器,如本示例中所示
How to use a servlet filter in Java to change an incoming servlet request url?