如何使用 JSR 验证在 Spring 中验证 Controller 方法参数?

Posted

技术标签:

【中文标题】如何使用 JSR 验证在 Spring 中验证 Controller 方法参数?【英文标题】:How to validate Controller method argument in Spring with JSR validations? 【发布时间】:2014-08-13 21:14:34 【问题描述】:

我正在使用给定的代码验证我的表单字段。

//controller method
public String addBusiness(@Valid @ModelAttribute("myForm") MyForm myForm, ...)

   //logic will go here.


//form 
@Component
public class MyForm
    @Pattern(regexp = "[0-9]3,10", message = "should be valid number")
    public String getZip_code()
    
       return this.zip_code;
    

现在我想用另一种控制器方法对zip_code 进行相同的验证,例如,

@RequestMapping(value = "$validation.url", method = RequestMethod.GET)
@ResponseBody
public List<String> getCityList(@RequestParam(value = "zip_code", required = true) final String zip_code)

    //logic goes here

这怎么可能?

【问题讨论】:

【参考方案1】:

不是。 @Valid 不适用于 @RequestParam 带注释的参数。您可以创建自定义HandlerMethodArgumentResolver 来执行此操作或在方法中自己进行验证。

【讨论】:

嗨@SotiriosDelimanolis 谢谢,如果可能的话,你能给我任何HandlerMethodArgumentResolver 的例子吗? @VishalZanzrukia 这只是一个您实现和注册的接口。实现取决于用例。谷歌这门课,你会发现像this one这样的例子。

以上是关于如何使用 JSR 验证在 Spring 中验证 Controller 方法参数?的主要内容,如果未能解决你的问题,请参考以下文章

使用JSR303框架对数据进行验证-spring框架

使用 Spring 的 JSR-303 约束验证器中的依赖注入失败

Spring Boot 使用 JSR303 实现参数验证

带有 i18n 消息的 Spring-MVC + RESTeasy 表单 bean 验证 (JSR 303)

在使用 JSR-303 验证表单时使用 I18n 消息

Spring Boot 使用 JSR303 实现参数验证