【问题标题】:Spring Boot : How to do REST validation based on input group?Spring Boot:如何根据输入组进行 REST 验证?
【发布时间】:2019-09-22 06:03:16
【问题描述】:

我有一个表格:

  1. 名字和姓氏是注册用户的必填字段。
  2. 新用户的 ssn。
  3. 所有者的合同号。

因此,在单击提交按钮时,将使用值调用 REST API(连接 API) 来自上述任一组。


我的 bean 类有成员:

  1. FN
  2. LN
  3. 社会保障号
  4. 合同编号

如何使用 bean/hibernate 验证器进行验证并确定已通过哪个组?

【问题讨论】:

    标签: spring bean-validation


    【解决方案1】:

    从 Hibernate 文档中,您可以阅读详细信息

    https://hibernate.org/validator/

    Hibernate Validator 允许表达和验证应用程序 约束。默认元数据源是注释,其中 通过使用 XML 覆盖和扩展的能力。它没有绑定 到特定的应用层或编程模型并且可用 用于服务器和客户端应用程序编程。但是一个简单的 示例超过 1000 个单词:

    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Size;
    
    public class User {
    
       @NotNull
       private String firstName;
    
       @NotNull
       private String lastName;
    
       @NotNull
       private String ssn;
    
    
    }
    

    【讨论】:

    • 这四个字段一次都不应该为空!我的验证器必须动态检查组字段!例如,firstname 和 lastname 应该是“not null”或 ssn 应该是“not null”或 contract 应该是“not null”。我该怎么做?
    【解决方案2】:

    Bean Validation 最适合用于简单的验证逻辑。如果您的验证需要更复杂,请改用 Spring 的 Validator 接口。

    我不知道上下文域,因此我将使用所有 String 字段将您的 bean 称为“表单”作为示例:

    public class Form {
    
        private String firstName;
    
        private String lastName;
    
        private String ssn;
    
        private String contractNumber;
    
       // getters and setters
    }
    

    然后为这个类创建一个验证器:

    public class FormValidator implements Validator {
    
        public boolean supports(Class clazz) {
            return Form.class.isAssignableFrom(clazz);
        }
    
        public void validate(Object target, Errors errors) {
            Form form = (Form) target;
    
            // validation logic
        }
    }
    

    那么你可以像这样简单地使用它:

    Form form = ...;
    Validator validator = new FormValidator();
    Errors errors = new Errors();
    
    validator.validate(form, errors);
    
    if (errors.hasErrors() {
        // not valid
    } else {
        // is valid
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多