@RequestBody необязательно (например, требуется = ложь) - PullRequest
6 голосов
/ 15 марта 2012

Есть ли способ настроить параметры аннотации @RequestBody (например, required = false), которые поддерживает RequestParam?

Мой основной путь через код - POST. Тем не менее, я хотел бы также поддерживать базовый запрос GET через браузер простой запрос http для целей отладки. Однако, когда я пытаюсь сделать это, я получаю 415 неподдерживаемую ошибку носителя.

Ответы [ 4 ]

7 голосов
/ 15 марта 2012

Мой основной путь через код с POST.Однако я хотел бы также поддерживать базовый запрос GET через браузер

. Для этого используйте атрибут method аннотации @RequestMapping, например,

@RequestMapping(value="/myPath", method=RequestMethod.GET)
public String doSomething() {
   ...
}

@RequestMapping(value="/myPath", method=RequestMethod.POST)
public String doSomething(@RequestBody payload) {
   ...
}
6 голосов
/ 29 октября 2012

@ RequestBody теперь, по-видимому, можно установить как необязательный, начиная с Spring 3.2M1: https://jira.springsource.org/browse/SPR-9239

Однако я проверял это в Spring 3.2M2 и выдает исключение при отправке через нулевое тело даже после установкиrequired = false, вместо прохождения через ноль.Эта проблема была подтверждена и исправлена, график 3,2 RC1

3 голосов
/ 12 сентября 2012

Есть ли способ сделать опции аннотации @RequestBody (например, required = false) такими, как поддерживает RequestParam?

Короче, я не верю, но вы можете сделать это вручную из потока ввода:

@Autowired
private MappingJacksonHttpMessageConverter mappingJacksonHttpMessageConverter;

RestResponse<String> updateViewingCard(@PathVariable(value = "custome") String customer,
        @RequestParam(value = "p1", required = false) String p1,
        @RequestParam(value = "p2", required = false) String p2, 
        // @RequestBody MyPayloadType payload,     Can't make this optional
        HttpServletRequest request,
        HttpServletResponse response)  throws... {

    MyPayloadType payload = null;
    if (0 < request.getContentLength()) {
            payload = this.mappingJacksonHttpMessageConverter.getObjectMapper().readValue(request.getInputStream(),
                    MyPayloadType.class);
    }
0 голосов
/ 05 марта 2019

Да, вы можете. В Spring 4 или Spring Boot 1.5 вы можете сделать это следующим образом:

@PostMapping("/error-report")
public String errorReport(@RequestBody(required = false) ErrorReportModel errorReportModel) {

    // YOUR LOGIC

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