Я пытаюсь проверить слабый запрос при весенней загрузке 2.1. Я могу правильно вычислить хэш в модульном тесте. Тем не менее, я не могу заставить работать проверку, когда сервер обрабатывает фактический запрос. Это связано с тем, что порядок изменения параметров URL-адреса изменяется между начальным запросом и временем вызова контроллера.
Вы можете воспроизвести это, используя пример контроллера и скручивание ниже. Обратите внимание, что полезная нагрузка формы в завитке равна hello=world&foo=baz&two=three
, а ответ переупорядочен до two=three&foo=baz&hello=world
.
Теория
Я считаю, что это происходит здесь . Spring обнаруживает, что данные формы были опубликованы, затем кодирует параметры формы и записывает их в новый поток ввода. Похоже, что карта, которая повторяется для кодирования параметров, не сохраняет первоначальный порядок.
Вопрос
Есть ли способ получить оригинальное тело сообщения?
Воспроизводить
@Controller
@ResponseBody
public class SlackController {
@RequestMapping(
path = "slack/command",
method = RequestMethod.POST,
produces = { MediaType.TEXT_PLAIN_VALUE },
consumes = { MediaType.APPLICATION_FORM_URLENCODED_VALUE })
public String executeCommand(
@RequestBody String requestBody
) {
return requestBody;
}
}
$ curl -X POST 'http://localhost:8080/slack/command' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: text/plain' \
-d 'hello=world&foo=baz&two=three'
HTTP/1.1 200 OK
Date: Thu, 25 Apr 2019 05:26:53 GMT
Content-Type: application/json;charset=iso-8859-1
Content-Length: 29
two=three&foo=baz&hello=world