Получить тело запроса в виде строки / json для проверки с помощью схемы json - Spring REST API загрузки - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь проверить JSON (переданный клиентом в качестве тела запроса) перед его преобразованием в модель в методе Controller.

Если проверка прошла успешно, то ничего не возвращается, пусть процесс продолжится, как был (весенняя загрузка для преобразования JSON в модель, помеченную как @RequestBody). Выдает ошибку в случае неудачной проверки ( everit-org / json-schema ).

Я пытался двумя способами:

  1. Реализация HandlerMethodArgumentResolver, но resolveArgument() не предоставляет подробные данные тела запроса, поскольку оно уже прочитано и хранится в ContentCachingRequestWrapper.

    ПРИМЕЧАНИЕ: inputStream в ContentCachingRequestWrapper не имеет никаких деталей тела запроса.

  2. Использование пружины Interceptor. Но это не помогает мне найти тип тела запроса, переданный в запросе. Поскольку схема JSON отличается для каждого запроса.

Могу ли я попробовать еще какие-нибудь подходы?

1 Ответ

0 голосов
/ 28 мая 2018

Я не могу добавить комментарий ... так ...

Какая проверка вам нужна? Если вы хотите только проверить поля, такие как длина строки или диапазон числа и так далее. Я рекомендую использовать @Validated для параметра mehtod контроллера и модель:

    @NotNull
    @Size(min = 32, max = 32)
    private String id;

Контроллер:

@PatchMapping
public Object update(@RequestBody @Validated User user, Errors errors) {
    ...
}

Если что-то не так, errors.hasErrors() вернет true.

редактирование:

ОК, я провел несколько тестов в фильтре:

    HttpServletRequest httpServletRequest = (HttpServletRequest)request;
    ServletInputStream inputStream = httpServletRequest.getInputStream();
    byte[] a = new byte[1024];
    inputStream.read(a);
    System.out.println(IOUtils.toString(a));

Я получил строку json (часть тела запроса):

    {"template":"5AF78355A4F0D58E03CE9F55AFA850F8","bd":"" ...
...