Когда я пытаюсь передать Map как RequestParam при весенней загрузке, он печатает имя переменной как ключ и полное значение как строку. может ли кто-нибудь помочь, почему он ведет себя странно. мой фрагмент кода ниже

@PostMapping(value = "/", produces = MediaType.ALL_VALUE)
public String testController(@RequestParam Map<String, String> parms) throws Exception {
    parms.forEach((k, v) -> System.out.println((k + ":" + v)));
    return "";
}

Когда я передаю значение

{"testkey": "testvalue"}

Вывод, который он производит, - это parms: {"testkey": "testvalue"}

0
Anand 16 Дек 2017 в 06:51

1 ответ

Лучший ответ

Возможно, вы хотите преобразовать тело HTTP-запроса в карту, вам следует использовать @RequestBody вместо @RequestParam в своих параметрах. Аннотация RequestBody преобразует тело HTTP-запроса в Object, а аннотация RequestParam анализирует http-параметр (параметр URL-адреса или поле формы) в параметр метода.

    @PostMapping(value = "/", produces = MediaType.ALL_VALUE)
    public String testController(@RequestBody Map<String, String> parms) throws Exception {
        parms.forEach((k, v) -> System.out.println((k + ":" + v)));
        return "";
    }

Протестируйте свой код, используя текущую команду * nix

curl --request POST \
  --url http://localhost:9090 \
  --header 'Cache-Control: no-cache' \
  --header 'Content-Type: application/json' \
  --data '{"testkey":"testkey"}'

Который отправит следующий http-запрос:

POST  HTTP/1.1
Host: localhost:9090
Content-Type: application/json
Cache-Control: no-cache

{"testkey":"testkey"}
1
Zheng Kun 22 Дек 2017 в 02:03