我想验证从客户端收到的JSON请求。我尝试使用批注(@notnull, @length(min=1,max=8),等等。),它工作正常,但问题是我无法获取如果无效的字段和消息将被调用。虽然,我在控制台中收到一条错误消息。
@notnull, @length(min=1,max=8)
违反约束的列表:
[ ConstraintViolationImpl { interpolatedMessage= 'must be greater than or equal to 900000000', propertyPath=phoneNumber, rootBeanClass=class com.org.infy.prime.RestWithJPA.CarrierFile, messageTemplate= '{javax.validation.constraints.Min.message}' } ConstraintViolationImpl { interpolatedMessage= 'length must be between 1 and 20', propertyPath=accountID, rootBeanClass=class com.org.infy.prime.RestWithJPA.CarrierFile, messageTemplate= '{org.hibernate.validator.constraints.Length.message}' } ]
询问是否有人可以帮助我,或者给我至少一种选择,以更有效的方式验证请求。
PS: 我不想逐个字段对其进行验证。
您可以执行以下操作:说这是请求类:
public class DummyRequest { @NotNull private String code; @NotNull private String someField; @NotNull private String someOtherField; @NotNull private Double length; @NotNull private Double breadth; @NotNull private Double height; // getters and setters }
然后,您可以编写自己的通用validate方法,该方法将给出“不太冗长”的约束违反消息,如下所示:
public static <T> List<String> validate (T input) { List<String> errors = new ArrayList<>(); Set<ConstraintViolation<T>> violations = Validation.buildDefaultValidatorFactory().getValidator().validate(input); if (violations.size() > 0) { for (ConstraintViolation<T> violation : violations) { errors.add(violation.getPropertyPath() + " " + violation.getMessage()); } } return errors; }
现在,您可以验证并检查您的请求是否包含任何错误。如果是,则可以打印它(或发送回无效的请求消息)。
public static void main (String[] args) { DummyRequest request = new DummyRequest(); request.setCode("Dummy Value"); List<String> validateMessages = validate(request); if (validateMessages.size() > 0 ) { for (String validateMessage: validateMessages) { System.out.println(validateMessage); } } } Output: -------- height may not be null length may not be null someField may not be null someOtherField may not be null breadth may not be null