Как кодировать знак «@» с помощью UriComponentsBuilder - PullRequest
1 голос
/ 01 апреля 2020

Эта проблема касается запроса HTTP PUT. Я передаю свой URL, параметры запроса и тело методу buildURI ().

private URI buildURI(String url, Map<String, Object> queryParameters, T body) {
        try {
            String bodyString = null;
            if (body != null) {
                bodyString = objectMapper.writeValueAsString(body);
            }

        } catch (JsonProcessingException e) {
            System.out.println(e);
        }

        UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(url);
        if ((queryParameters != null) && (!queryParameters.isEmpty())) {
            queryParameters.forEach((a, b) -> uriComponentsBuilder.queryParam(a, b));
        }

        return uriComponentsBuilder.encode().buildAndExpand().toUri();
    }

Наличие зарезервированных символов (& =%) может помешать правильному анализу строки URI. Чтобы заменить эти символы, я использовал этот UriComponentsBuilder.fromUriString (url). Проблема в том, что список символов не содержит «@».

Мой URL-адрес http://1.1.1.1: 1111 / xx / xx / save / abc@gmail.com. Мне также нужно заменить @.

Но если я кодирую @, а затем вызываю buildURI (), это дает URL-адрес в виде http://1.1.1.1: 1111 / xx / xx / save / abc% 2540gmail.com . (из-за двойного кодирования)

Вызов этого buildURI () является обязательным, поскольку я использую общий код. Мне нужно в любом случае закодировать этот «@» и получить URL-адрес как http://1.1.1.1: 1111 / xx / xx / save / abc% 40gmail.com .

Пожалуйста, дайте мне решение.

...