如何检查请求参数是否为空 字符串 @RequestMapping参数?

在我的控制器中,我有 String 参数,其中包含一些 id,该 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)

没有成功。据我所知,两者都只能检查该参数是否在请求中呈现(!= null)。params = {"id"}@RequestParam(required = true)id

最有可能的是,我必须用控制器boby中的代码进行检查,例如

if (id == null || id.isEmpty()) {
    return someErrorResponse;
}

但如果我错了,请纠正我。提前致谢。

附言:我的应用程序在Apache Tomcat 7.0.62容器中的Java 1.7 SE上运行


答案 1

根据使用该注释的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

如果要使 Java EE 符合验证,请使用 。@Size(min=1)

休眠验证器具有用于此目的的注释。但这不是Java规范的一部分。@NotEmpty

顺便说一句,保持如上所述的通知不会强制请求中存在参数。required=true

编辑评论的反应:

Spring 符合 Java EE 验证标准,因此,如果您在类路径上有一些 Java EE 验证 API implmentor,则@Size注释应该有效。到目前为止,我只使用了休眠验证器。因此,您可以通过将其添加到类路径中来启用这些验证功能:

<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端点,它非常重要。它将为您打开新的世界。

从 Java EE 验证教程开始

春季文档的相关部分


推荐