java - Spring Boot中请求字段的条件验证

标签 java spring hibernate spring-boot bean-validation

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

此类正在用作请求正文。

验证条件:

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

我尝试创建自定义注释,但我不知道如何操作以及如何使用它

Public class test
{
    String value1;
    String value2;
}

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

最佳答案

有几种方法可以验证请求正文,或者换句话说,实现服务器端验证。其中一些可以是

  1. 使用基本注释
  2. 为自定义验证创建自定义注释
  3. 为自定义验证创建自定义 validator

我最喜欢的是选项 3。因此我将在下面给出选项 3 的解决方案。步骤是

  1. 创建自定义 validator

    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. 将您的自定义 validator 绑定(bind)到模型的 Controller 中

      public class MainSiteController
      {
      @Autowired
      private MessageValidator messageValidator;
    
      @InitBinder("message")
      protected void initMessageBinder(WebDataBinder binder) {
        binder.addValidators(messageValidator);
      }
      }
    
  3. 定义模型有效并让 Controller 完成工作

    @PostMapping( path = "/saveMessage")
    public String saveNewMessage(@Validated Message message, BindingResult bindingResult){
        if (bindingResult.hasErrors()) {
            return "message";
        }
        myService.saveNewMessageModel(message);
        return "messageSaved";
    }
    

关于java - Spring Boot中请求字段的条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58686626/

相关文章:

java - Hibernate从连接表中获取数据

java - "~[classes/:?]"字符串(或类似的字符串,如 ~[? :? ])何时出现在 Java 中堆栈跟踪行的末尾?

java - 用户 'test_user' @'test_host' 的访问被拒绝(使用密码 : YES)

java - Spring Security 显示自定义页面时出错

java - 连接bean时如何思考

mysql - 即使提供了 Bean,SessionFactory 也不会 Autowiring

java - Hibernate Search 是否可以在索引过程之前预定义查询或条件?

java - 将商品添加到购物车时,playframework 中的功能测试失败

java - 从对象数据库生成列表

java - 没有jsp的Spring安全