在Spring Boot中对请求字段进行条件验证

我只是从请求正文的字段验证开始,并实现了所有基本的带注释的验证。我有一个依赖于其他字段的字段验证。

正在使用此类作为请求正文。

验证条件:

如果value1.equals('OK')value2应该匹配特定的正则表达式模式,如果不匹配正则表达式模式,则引发验证错误,说value2不匹配正则表达式模式

我试图创建一个自定义注释,但是我不知道该怎么做以及如何使用它

Public class test
{
    String value1;
    String value2;
}

我希望针对特定情况实施条件验证

lzkyun 回答:在Spring Boot中对请求字段进行条件验证

有两种方法可以验证请求正文,即实现服务器端验证。其中一些可以是

  1. 使用基本注释
  2. 创建自定义注释以进行自定义验证
  3. 创建用于自定义验证的自定义验证器

我最喜欢的是选项3。因此,我将在下面为选项3提供解决方案。步骤是

  1. 创建自定义验证器

    import org.springframework.stereotype.Component;
    import org.springframework.validation.Errors;
    import org.springframework.validation.ValidationUtils;
    import org.springframework.validation.Validator;
    
    @Component
    public class MessageValidator implements Validator {
    
    @Override
    public boolean supports(Class<?> clazz) {
        return Message.class.equals(clazz);
    }
    
    @Override
    public void validate(Object target,Errors errors) {
        ValidationUtils.rejectIfEmpty(errors,"value1","value1 is empty");
        ValidationUtils.rejectIfEmpty(errors,"value2","value2 is empty");
        Message m = (Message) target; 
        if (m.getValue1().trim().equalsIgnoreCase("OK") && m.getValue2().matches(SOME_REGEX_PATTERN)) {
            errors.rejectValue("value2","My custom validator is working");
        }
        }
      }
    
  2. 通过

    在控制器中绑定自定义验证器
      public class MainSiteController
      {
      @Autowired
      private MessageValidator messageValidator;
    
      @InitBinder("message")
      protected void initMessageBinder(WebDataBinder binder) {
        binder.addValidators(messageValidator);
      }
      }
    
  3. 定义模型有效,让控制器执行工作

    @PostMapping( path = "/saveMessage")
    public String saveNewMessage(@Validated Message message,BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return "message";
        }
        myService.saveNewMessageModel(message);
        return "messageSaved";
    }
    
本文链接:https://www.f2er.com/3169332.html

大家都在问