Saltar al contenido

‘+’ (signo más) no codificado con RestTemplate usando String url, pero interpretado como ‘ ‘ (espacio)

Basta ya de indagar en otras webs ya que has llegado al sitio indicado, poseemos la solución que quieres recibir sin problema.

Nos dimos cuenta de que la URL se puede modificar en un interceptor después de realizar la codificación. Entonces, una solución sería usar un interceptor, que codifica el signo más en los parámetros de consulta.

RestTemplate restTemplate = new RestTemplateBuilder()
        .rootUri("http://localhost:8080")
        .interceptors(new PlusEncoderInterceptor())
        .build();

Un ejemplo abreviado:

public class PlusEncoderInterceptor implements ClientHttpRequestInterceptor 

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException 
        return execution.execute(new HttpRequestWrapper(request) 
            @Override
            public URI getURI() 
                URI u = super.getURI();
                String strictlyEscapedQuery = StringUtils.replace(u.getRawQuery(), "+", "%2B");
                return UriComponentsBuilder.fromUri(u)
                        .replaceQuery(strictlyEscapedQuery)
                        .build(true).toUri();
            
        , body);
    

El tema también ha sido discutido aquí.

Codificación de variables URI en RestTemplate [SPR-16202]

Una solución más simple es establecer el modo de codificación en el generador de URI en VALUES_ONLY.

    DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
    builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
    RestTemplate restTemplate = new RestTemplateBuilder()
            .rootUri("http://localhost:8080")
            .uriTemplateHandler(builderFactory)
            .build();

Esto logró el mismo resultado que usar PlusEncodingInterceptor al usar parámetros de consulta.

Aquí puedes ver las comentarios y valoraciones de los usuarios

Puedes proteger nuestra ocupación mostrando un comentario y valorándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *