如何检查@RequestMapping 参数中的请求参数是否为空字符串?
How to check request parameter is not empty String in @RequestMapping params?
在我的控制器中,我有一个字符串参数,其中包含一些 id,它不应该是空字符串。我想知道,有什么方法可以检查@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。我的应用程序 运行 在 Java 1.7 SE in Apache Tomcat 7.0.62 container
如果您想 Java EE 符合验证要求,请使用 @Size(min=1)
。
Hibernate Validator 具有用于此目的的 @NotEmpty
注释。但这不是 Java 规范的一部分。
顺便说一句,保留 required=true
,因为上面的通知不会强制在请求中出现参数。
编辑对评论的反应:
Spring 符合 Java EE 验证,因此如果您在 class 路径上有一些 Java EE 验证 API 实现器,@Size 注释应该可以工作.到目前为止,我只使用了休眠验证器。因此,您可以通过将其添加到 classpath:
来启用这些验证功能
<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 端点,它非常重要。它将为您打开新的世界。
您可以像
那样使用 defaultValue
@RequestParam(value = "id", required = true, defaultValue = "-1") String id
但是,你必须再次使用 if like
if(id.equals("-1")){
return "someErrorPage"
}
否则您可以为此目的创建一个过滤器,如本例所示
How to use a servlet filter in Java to change an incoming servlet request url?
根据使用该注释的 Spring 代码
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
像这样的东西应该可以工作:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
在我的控制器中,我有一个字符串参数,其中包含一些 id,它不应该是空字符串。我想知道,有什么方法可以检查@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。我的应用程序 运行 在 Java 1.7 SE in Apache Tomcat 7.0.62 container
如果您想 Java EE 符合验证要求,请使用 @Size(min=1)
。
Hibernate Validator 具有用于此目的的 @NotEmpty
注释。但这不是 Java 规范的一部分。
顺便说一句,保留 required=true
,因为上面的通知不会强制在请求中出现参数。
编辑对评论的反应:
Spring 符合 Java EE 验证,因此如果您在 class 路径上有一些 Java EE 验证 API 实现器,@Size 注释应该可以工作.到目前为止,我只使用了休眠验证器。因此,您可以通过将其添加到 classpath:
来启用这些验证功能<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 端点,它非常重要。它将为您打开新的世界。
您可以像
那样使用defaultValue
@RequestParam(value = "id", required = true, defaultValue = "-1") String id
但是,你必须再次使用 if like
if(id.equals("-1")){
return "someErrorPage"
}
否则您可以为此目的创建一个过滤器,如本例所示
How to use a servlet filter in Java to change an incoming servlet request url?
根据使用该注释的 Spring 代码
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
像这样的东西应该可以工作:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)