如何在@RequestMapping参数中检查请求参数是否为空?

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上运行

lub*_*nac 9

如果您希望与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端点,这非常重要.它将为您打开新的世界.

从Java EE教程开始进行验证

Spring doc的相关部分


小智 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)