弹簧@valid不起作用

rus*_*ush 5 java validation spring spring-mvc

我使用 \xe3\x80\x8cpostman\xe3\x80\x8d 发送“application/json”类型的 POST 请求,将参数“phone”设置为空字符串,通常它应该打印注释“@NotEmpty”的错误,但是,它没有打印任何内容并且运行良好。

\n\n

控制器:

\n\n
  @RequestMapping(value = "verify_smscode", method = RequestMethod.POST)\n  @ResponseBody\n  public ResponseDto verifySmsCode(HttpServletRequest request,\n      @Valid @RequestBody VerifySmsCodeParam params, Errors errors) {\n    if(errors.hasErrors()) {\n      System.out.println("error");\n    }\n\n    boolean success = userService.verifySmsCode(params.getPhone(), params.getSmsCode());\n\n    Map<String, Object> result = new HashMap<>();\n    result.put("status", success);\n    return new ResponseDto(result);\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

模型:

\n\n
@Data\n@NoArgsConstructor\npublic class VerifySmsCodeParam {\n\n  @NotEmpty //import org.hibernate.validator.constraints.NotEmpty;\n  private String phone;\n\n  @NotEmpty\n  private String smsCode;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

SpringMvc配置:

\n\n
@Configuration\n@ComponentScan(basePackages="com.shit.voiceshare")\n@EnableWebMvc\npublic class SpringMvcConfig extends WebMvcConfigurerAdapter {\n  @Override\n  public Validator getValidator() {\n    LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();\n    localValidatorFactoryBean.setProviderClass(HibernateValidator.class);\n    return localValidatorFactoryBean;\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ahm*_*ndy 1

嗯,我还是春天的新人。但这是针对我的情况的答案,如果它适合您的话。

为了使@Valid工作,你应该包含两个包javaxvalidation-api和hibernate-validator,但我只包含validation-api。

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>
    
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.1.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)