Есть ли способ получить оригинальное тело сообщения в Spring boot? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь проверить слабый запрос при весенней загрузке 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
...