【问题标题】:spring @valid doesn't work春天@valid 不起作用
【发布时间】:2017-09-12 04:55:08
【问题描述】:

我用「postman」发送一个“application/json”类型的POST请求,将参数“phone”设置为空字符串,通常它应该打印注释“@NotEmpty”的错误,但是它没有打印任何东西并且工作良好。

控制器:

  @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);
  }

型号:

@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;
  }
}

【问题讨论】:

  • 您是否尝试过使用BindingResult .this 可能是使用这种方法的一个很好的例子。
  • 尝试使用 Validated 而不是 Valid
  • 还是不行

标签: java spring validation spring-mvc


【解决方案1】:

您可能缺少依赖项。

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

另外,请确保正确导入 NotNull

import javax.validation.constraints.NotNull;

【讨论】:

    【解决方案2】:

    嗯,我还是春天的新手。但如果它适合你,这里是我的情况的答案。

    要让@Valid 工作,你应该包含两个包 javax validation-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>
    

    【讨论】:

      【解决方案3】:

      在我的情况下,在 "org.springframework.validation.annotation" 的 RestController 顶部添加 @Validated 解决了问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2021-07-15
        • 2013-06-18
        • 1970-01-01
        • 2017-09-06
        • 1970-01-01
        • 2013-01-21
        相关资源
        最近更新 更多