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

时间:2015-09-09 09:29:35

标签: java spring spring-mvc hibernate-validator spring-annotations

在我的控制器中,我有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上运行

3 个答案:

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

Start with Java EE Tutorial for validation

Relevant part of Spring doc

答案 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?