Когда вызывается метод handleEmptyBody в интерфейсе RequestBodyAdvice? - PullRequest
1 голос
/ 20 марта 2020

handleEmptyBody

    @Override
    public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
            Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
        log.debug("handleEmptyBody");
        return body;
    }

    @PostMapping ("test")
    public void test(@RequestBody String json){

    }
  1. Если используется аргумент String, handleEmptyBody может вызываться, когда тело пусто
    @PostMapping ("test")
    public void test(@RequestBody Map<String, Object> json){

    }
Если использовать аргумент Map, будут ошибки, и handleEmptyBody не может быть вызван, когда тело пусто

WARN (AbstractHandlerExceptionResolver. java: 199) [logException] Resolved [org. springframework.http.converter.HttpMessageNotReadableException: отсутствует обязательное тело запроса: publi c void test (java .util.Map)]

Есть ли в среде Spring пробовал какое-то преобразование типов раньше?

1 Ответ

0 голосов
/ 20 марта 2020

Если вы ожидаете, что пользователю не нужно указывать значение тела (и вы хотите обрабатывать пустые тела с помощью указанной вами рекомендации запроса, вам нужно указать, что @RequestBody не требуется.

@RequestBody(required=false).

Это должно позволить вам преодолеть исключение, с которым вы столкнулись, а также позволить вашему RequestBodyAdvice срабатывать.

Кроме того, я предполагаю, что это сработало для String потому что в этих обстоятельствах Spring вставляет пустую строку, поэтому тело запроса не пропускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...