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)