spring @valid doesn't work

China☆狼群 提交于 2021-01-28 02:46:16

问题


i send a POST request of "application/json" type with 「postman」,set the param "phone" to empty string, normally it should print error for annotation "@NotEmpty", however, it didn't print anything and work well.

controller:

  @RequestMapping(value = "verify_smscode", method = RequestMethod.POST)
  @ResponseBody
  public ResponseDto verifySmsCode(HttpServletRequest request,
      @Valid @RequestBody VerifySmsCodeParam params, Errors errors) {
    if(errors.hasErrors()) {
      System.out.println("error");
    }

    boolean success = userService.verifySmsCode(params.getPhone(), params.getSmsCode());

    Map<String, Object> result = new HashMap<>();
    result.put("status", success);
    return new ResponseDto(result);
  }

Model:

@Data
@NoArgsConstructor
public class VerifySmsCodeParam {

  @NotEmpty //import org.hibernate.validator.constraints.NotEmpty;
  private String phone;

  @NotEmpty
  private String smsCode;
}

SpringMvcConfig:

@Configuration
@ComponentScan(basePackages="com.shit.voiceshare")
@EnableWebMvc
public class SpringMvcConfig extends WebMvcConfigurerAdapter {
  @Override
  public Validator getValidator() {
    LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
    localValidatorFactoryBean.setProviderClass(HibernateValidator.class);
    return localValidatorFactoryBean;
  }
}

回答1:


You are probably missing the dependencies.

<dependency>
   <groupId>javax.validation</groupId>
   <artifactId>validation-api</artifactId>
</dependency>
<dependency>
   <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

Also, make sure you import NotNull correctly.

import javax.validation.constraints.NotNull;



回答2:


Am, I am still new in Spring. But here is an answer for my situation if it suits you.

To make @Valid work you should include two packages javax validation-api and hibernate-validator, but I only included 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>


来源:https://stackoverflow.com/questions/43436804/spring-valid-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!