Как проверить запрос JSON в Spring Boot? - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу проверить JSON-запрос, который я получаю со стороны клиента. Я попытался использовать аннотации (@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: Я не хочу проверять это поле за полем.

1 Ответ

0 голосов
/ 06 сентября 2018

Вы можете сделать что-то вроде этого: Скажите, что это класс запроса:

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
}

Затем вы можете написать свой собственный универсальный метод проверки, который будет выдавать «менее подробное» сообщение о нарушении ограничения, например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...