WeG*_*eGa 13 java spring spring-mvc hibernate-validator spring-annotations
在我的控制器中,我有String参数,包含一些id,不应该是空字符串的null.我想知道,有没有办法检查它是不是@RequestMapping params中的空字符串?我试图在某些方面解决它
@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)
Run Code Online (Sandbox Code Playgroud)
没有成功.据我了解,双方params = {"id"}并@RequestParam(required = true)只能检查参数id呈现在请求(!= NULL).
我很可能必须使用控制器boby中的代码检查它,例如
if (id == null || id.isEmpty()) {
return someErrorResponse;
}
Run Code Online (Sandbox Code Playgroud)
但如果我错了,请纠正我.提前致谢.
PS我的应用程序在Apache Tomcat 7.0.62容器中的Java 1.7 SE上运行
如果您希望与Java EE兼容,请使用验证@Size(min=1).
Hibernate Validator具有@NotEmpty用于此目的的注释.但这不是Java规范的一部分.
顺便说一句,保持required=true上述通知不会强制请求中存在param.
编辑对评论的反应:
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>
Run Code Online (Sandbox Code Playgroud)
你可以用@Validated注释注释你的控制器,并执行此操作:
@RequestMapping(value = someURL, params = {"id"})
public SomeResponse doSomething(@RequestParam(required = true) @Size(min=1) String id)
Run Code Online (Sandbox Code Playgroud)
您还可以自定义将发送给客户端的错误消息.
如果您不熟悉Java EE验证,我建议您开始研究它,因为如果您正在创建REST/HTTP端点,这非常重要.它将为您打开新的世界.
小智 9
根据使用该注释的Spring代码
org.springframework.web.servlet.mvc.annotation.ServletAnnotationMappingUtils.checkParameters(String[], HttpServletRequest)
Run Code Online (Sandbox Code Playgroud)
这样的事情应该有效:
@RequestMapping(value = someURL, params = {"id!="})
public SomeResponse doSomething(@RequestParam(required = true) String id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28257 次 |
| 最近记录: |