Spring MVC - Почему не удается использовать @RequestBody и @RequestParam вместе

Использование HTTP-клиента с почтовым запросом и приложением Content-Type / x-www-form-urlencoded

1) Только @RequestBody

Запрос - localhost: 8080 / SpringMVC / welcome In Body - name = abc

Код-

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestBody String body, Model model) {
    model.addAttribute("message", body);
    return "hello";
}

// дает тело как 'Имя = а» как и ожидалось

2) Только @RequestParam

Запрос - localhost: 8080 / SpringMVC / welcome In Body - name = abc

Код-

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestParam String name, Model model) {
    model.addAttribute("name", name);
    return "hello";
}

// дает имя как 'а» как и ожидалось

3) оба вместе

Запрос - localhost: 8080 / SpringMVC / welcome In Body - name = abc

Код-

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestBody String body, @RequestParam String name, Model model) {
    model.addAttribute("name", name);
    model.addAttribute("message", body);
    return "hello";
}

// HTTP Error Code 400 - запрос, отправленный клиентом, был синтаксически неверным.

4) Выше с измененным положением параметров

Запрос - localhost: 8080 / SpringMVC / welcome In Body - name = abc

Код-

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestParam String name, @RequestBody String body, Model model) {
    model.addAttribute("name", name);
    model.addAttribute("message", body);
    return "hello";
}

// Нет ошибок. Имя 'а», тело пусто

5) Вместе, но получить параметры типа URL

Запрос - localhost: 8080 / SpringMVC / welcome? Name = xyz В теле - name = abc

Код-

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestBody String body, @RequestParam String name, Model model) {
    model.addAttribute("name", name);
    model.addAttribute("message", body);
    return "hello";
}

// имя 'хуг» и тело естьИмя = а»

6) То же, что и 5), но с изменением положения параметров

Код -

@RequestMapping(method = RequestMethod.POST)
public String printWelcome(@RequestParam String name, @RequestBody String body, Model model) {
    model.addAttribute("name", name);
    model.addAttribute("message", body);
    return "hello";
}

// name = 'хуг, а» тело пусто

Может кто-нибудь объяснить это поведение?

Ответы на вопрос(4)

Ваш ответ на вопрос