Tengo el siguiente código donde estoy haciendo una solicitud de formulario POST. El cuerpo de la solicitud contiene el nombre de usuario y la contraseña. La contraseña contiene @ caracteres, que se reemplaza por RestTemplate con% 40 y recibo un error "no autorizado" porque la contraseña ahora es incorrecta. La siguiente es la información de depuración de bufferOutput (cuerpo de solicitud)
merchant_id=firstname+de-lastname%40gmail.com&password=%40PasswordAquí está el fragmento de código que está haciendo la llamada.
MultiValueMap<String, String> formData = new LinkedMultiValueMap<String, String>(); String url = "SOME_URL"; formData.add("username", "xay@gmail.com"); formData.add("password", "@name321"); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); HttpEntity<MultiValueMap<String,String>> requestEntity = new HttpEntity<MultiValueMap<String,String>>(formData,headers); RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters() .add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); restTemplate.exchange(url, HttpMethod.POST, requestEntity, Authentication.class,"321");La pregunta es cómo decirle a restTemplate que no escape de los datos del cuerpo. Tenga en cuenta que la solicitud debe ser una solicitud de formulario de publicación y no puedo usar UriComponentsBuilder para solucionar el problema.
Creo que necesita agregar un FormHttpMessageConverter a su RestTemplate en lugar de un StringHttpMessageConverter.