Как заставить Spring Boot отображать параметры запроса отдельно от данных формы? - PullRequest
0 голосов
/ 13 марта 2020
    @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);
            }
        });

Он объединяет данные формы и данные запроса в одну карту. Так есть ли альтернативный способ только для анализа данных формы или исключения параметров запроса из карты!?

1 Ответ

0 голосов
/ 13 марта 2020

Из javado c для @RequestParam:

Весной MVC "параметры запроса" отображаются на параметры запроса, данные формы и детали в составных запросах. Это связано с тем, что Servlet API объединяет параметры запроса и данные формы в единую карту, называемую «параметры», что включает в себя автоматический c разбор тела запроса.

Не уверен, что есть более элегантный Кстати, вы можете использовать класс Spring UriComponentsBuilder для анализа строки URI и возврата параметров запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...