2017-06-18 135 views
0

我正在开发spring-boot应用程序,我需要在检查其他信息之前验证用户信息。这是一个片段:向@Valid发送请求

@RequestMapping(value = "/create-user", method = RequestMethod.POST) 
public String ceateCustomer(@Valid @RequestBody User user){ 
     myService.create(user); 
} 

当用户来自另一个途径/创建-SP-用户,我不得不重新有效用户:

@RequestMapping(value = "/create-sp-user", method = RequestMethod.POST) 
    public String ceateCustomer(@Valid @RequestBody User user){ 
     user.setSp(true); 
     // I tried @Valid user without success 
     // In my User class if sp = true the field telNumber is mandatory 
     myService.create(user); 
} 

请问您有什么想法?

问候

+1

您可以轻松编写自己的自定义验证程序,因为没有默认的验证器可以根据其他值检查必填字段。 –

+0

对不起,我没有得到你想要的。来自客户端的用户结构是什么?或者是,你想在**设置sp = true之后验证用户**?在这种情况下,您可能需要按照此处所述编写自定义验证程序:https://stackoverflow.com/questions/12146298/spring-mvc-how-to-perform-validation - @valid注释会在*之前检查它* *任何代码在控制器中执行。 – Dominik

+0

谢谢@Dominik是的,我必须验证用户设置为真正后 – Olivier

回答

0

像多米尼克说,以前在控制器

如果你想验证你应该使用自定义的验证方法中的对象执行任何代码@Valid注释验证的对象。

执行org.springframework.validation.Validator并在控制器内调用validate方法。

@RequestMapping(value = "/create-sp-user", method = RequestMethod.POST) 
    public String ceateCustomer(@Valid @RequestBody User user, BindingResult result){ 
     user.setSp(true); 
     CustomValidator customValidator = new CustomValidator(); 
     customValidator.validate(user, result); 

     if (result.hasErrors()){ 
     //do something 
     } else { 
     myService.create(user); 
     } 
} 
+0

谢谢@Janar我试过你的解决方案,但我有所有的时间0错误。 – Olivier

+0

也许你错误地实现了验证器?请发布您的验证码。 – Janar

+0

嗨@Janar我正在与@Olivier这是验证类''公共类UserValidator实现验证{0} {0} {0}受保护的记录器记录器= LoggerFactory.getLogger(UserValidator.class); @Override public boolean supports(Class clazz){ return userInfo.class.equals(clazz); } @Override public void validate(Object target,Errors errors)User userInfo =(User)target; \t ... //电话号码 \t \t如果(StringUtils.isBlank(userInfo.getPhoneNumber())){ \t \t \t errors.rejectValue( “phoneNumber的”, “phoneNumber的[需要]”, “失败”) ; \t \t} \t \t \t .. \t} }' – Victor