【问题标题】:Java Validation: Validate an object within an objectJava Validation:验证对象内的对象
【发布时间】:2019-11-27 10:46:40
【问题描述】:

我有两个对象:

public class CancelRequest{
 @NotEmpty
 private String id;

 @NotNull
 private BookingDetails;
}

BookingDetails 对象:

public class BookingDetails{
 @NotEmpty
 private String bookingId;
}

我负责验证请求的班级是CancelRequestValidator

...
import javax.validation.Validator;
...
public class CancelRequestValidator{
...
public void check(CancelRequest request){
 Set<ConstraintViolation<NorthAmericaCancelTripRequest>> violations = 
validator.validate(request);
...
 }
}

我是如何执行验证的?

CancelRequest request = new CancelRequest("id",new BookingDetails(""));
CancelValidator validator = new CancelValidator();
violations = validator.check(request);

违规应该有一个条目说 bookingId 不能为空,而是认为对象有效。我需要以这种方式进行验证,因为我需要在此对象上执行一些其他业务验证,因此我使用 javax 和自定义验证的混合。

谢谢

【问题讨论】:

    标签: java validation hibernate-validator


    【解决方案1】:

    要执行嵌套bean验证,需要在嵌套对象上使用@Valid注解:

    public class CancelRequest{
      @NotEmpty
      private String id;
    
      @NotNull
      @Valid
      private BookingDetails;
    }
    

    【讨论】:

      【解决方案2】:

      正如 Eamon Scullion 所说,@Valid 将适用于嵌套验证,但不要忘记将 @NotNull 用于 Date 等对象,@NotBlank 用于文本字段,@NotEmpty 用于 Iterable 对象

      public class CancelRequest{
          @NotBlank
          private String id;
          
      
          @NotEmpty
          private List<E> myList;
      
          @NotNull
          @Valid
          private BookingDetails;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        相关资源
        最近更新 更多