是否可以在Spring MVC REST端点中验证@RequestParam?

时间:2014-07-05 03:59:54

标签: java spring spring-mvc

在泽西岛2,可以这样做:

@GET
@PATH("user/{email}")
public IDto getUser(@NotNull @Email @PathParam("email") String validEmail) {
    return userManagementService.findUserByEmail(validEmail);
}

但是我无法在Spring MVC中创建类似的东西,似乎只有在@RequestBody中提供对象或使用SpringMVC表单时才进行验证,例如以下内容不起作用:

@RequestMapping(value="/user/{email}", method = RequestMethod.GET)
public @ResponseBody IDto getUser(@NotNull @Email @PathVariable String validEmail) {
    return userManagementService.findUserByEmail(validEmail);
}   

还有其他类似的问题,但那些似乎是面向Spring MVC UI应用程序,在我的情况下,它只是一个返回JSON响应的REST API,所以我没有任何View映射/绑定到控制器。

5 个答案:

答案 0 :(得分:1)

据我所知,你不能用Spring开箱即用。

选项:

  1. 使用正则表达式:

    @RequestMapping(value="/user/{email:SOME_REXEXP}", method = RequestMethod.GET)
    public @ResponseBody IDto getUser(@PathVariable String validEmail) {
        return userManagementService.findUserByEmail(validEmail);
    }   
    
  2. 使用Hibernate Validator验证方法。要么手动调用验证器,要么使用AOP让Spring为您调用它。请参阅https://github.com/gunnarmorling/methodvalidation-integration

答案 1 :(得分:1)

似乎可以使用@Validated

这里是example

答案 2 :(得分:1)

1-只需在类顶部添加@Validated批注。 2-在方法签名中,在@RequestParam注释之前放置用于验证的所有注释(@ NotBlank,Min(1)等)。

答案 3 :(得分:0)

控制器应标有spring的@Validated

因此,您可以使用

更新代码
@Validated
@RequestMapping(value="/user/{email}", method = RequestMethod.GET)
public @ResponseBody IDto getUser(
    @NotNull 
    @Email 
    @PathVariable String validEmail) {
    return userManagementService.findUserByEmail(validEmail);
}

答案 4 :(得分:0)

来自org.springframework.validation.annotation.Validated包的经过验证的注释,用于验证@PathVariable。确保使用@Validated注释了该类。

@GetMapping("/name-for-day/{dayOfWeek}")
  public String getNameOfDay(@PathVariable("dayOfWeek") @Min(1) @Max(7) Integer dayOfWeek) {
        return dayOfWeek + "";
}