@RequestMapping(value = "/**", consumes = MediaType.ALL_VALUE)
@ResponseBody
public Object mirror(HttpServletRequest req, @Nullable @RequestBody Map<String, String> form) {
...
}
Я просто хочу, чтобы здесь был простой ключ и значение для всех записей данных формы, но он также включает параметры запроса на карте.
Мне нужно иметь возможность определить разницу между тем, что пришло из формы и того, что пришло из запроса.
Отдельное получение параметров запроса легко выполняется с помощью анализа URI, но удалить параметры запроса из карты формы не так просто. Особенно в том случае, если они имеют одинаковые ключи.
Изменение параметра на MultiValueMap добавляет значения с тем же ключом в массив. Использование только карты приводит к тому, что параметры запроса перезаписывают данные формы равными ключами.
Я обнаружил, где это происходит, для MockHttpServletRequest по крайней мере: buildRequest
метод:
String query = this.url.getRawQuery();
if (!this.queryParams.isEmpty()) {
String s = UriComponentsBuilder.newInstance().queryParams(this.queryParams).build().encode().getQuery();
query = StringUtils.isEmpty(query) ? s : query + "&" + s;
}
if (query != null) {
request.setQueryString(query);
}
addRequestParams(request, UriComponentsBuilder.fromUri(this.url).build().getQueryParams());
this.parameters.forEach((name, values) -> {
for (String value : values) {
request.addParameter(name, value);
}
});
Он объединяет данные формы и данные запроса в одну карту. Так есть ли альтернативный способ только для анализа данных формы или исключения параметров запроса из карты!?