2017-04-16 113 views
2

我用“postman”发送一个“application/json”类型的POST请求,将param“phone”设置为空字符串,但是通常它应该为注释“@NotEmpty”打印错误,但是,它没有打印任何东西,工作得很好。spring @valid不起作用

控制器:

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

有你试着用'BindingResult'。[这](https://spring.io/guides/gs/validating-form-input/)可能是这种方法的使用的一个很好的例子。 –

+0

尝试使用验证而不是有效 –

+0

它仍然不起作用 – rush

回答

0

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

要使@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>