sql >> データベース >  >> RDS >> Mysql

スプリングブートでどちらかの検証をどのように使用できますか?

    このためのカスタムアノテーションを作成し、クラスで使用する必要があります

    @AtLeastOneNotEmpty(fields = {"name", "phone"})
    public class User{
    

    カスタムアノテーションの実装

    @Constraint(validatedBy = AtLeastOneNotEmptyValidator.class)
    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AtLeastOneNotEmpty {
    
      String message() default "At least one cannot be null";
    
      String[] fields();
    
      Class<?>[] groups() default {};
    
      Class<? extends Payload>[] payload() default {};
    }
    

    そしてカスタムアノテーションのバリデーター

    public class AtLeastOneNotEmptyValidator
        implements ConstraintValidator<AtLeastOneNotEmpty, Object> {
    
      private String[] fields;
    
      public void initialize(AtLeastOneNotEmpty constraintAnnotation) {
        this.fields = constraintAnnotation.fields();
      }
    
      public boolean isValid(Object value, ConstraintValidatorContext context) {
    
        List<String> fieldValues = new ArrayList<String>();
    
        for (String field : fields) {
          Object propertyValue = new BeanWrapperImpl(value).getPropertyValue(field);
          if (ObjectUtils.isEmpty(propertyValue)) {
            fieldValues.add(null);
          } else {
            fieldValues.add(propertyValue.toString());
          }
        }
        return fieldValues.stream().anyMatch(fieldValue -> fieldValue!= null);
      }
    }
    


    1. varcharフィールドが広いと、MySQLリンクサーバーでopenqueryを使用すると、要求された変換がサポートされないというエラーが発生します

    2. PostgreSQL自動インクリメント機能はありませんか?

    3. MySQL GUID/UUIDの保存

    4. DBAとしてのあなたの価値を財務幹部に明確に伝える方法