Puedo hacer una solicitud apropiada Plantilla Resto

codificador Tester:

Así que estoy llamando a una API (Esta API se utiliza para enviar SMS) en mi proyecto de Java utilizando un GET.

Esta es la URL de la API:

http://xxxxx.smsapi.xx/xxxx/xxxx.aspx?user=username&password=password&msisdn=xxxxxx&sid=1111111&msg=test%20msg&fl=0

y cuando hago la llamada en mi broweser i obtener una respuesta buena como esta:

{"ErrorCode":"000",
"ErrorMessage":"Success",
"JobId":"id",
"MessageData":
[{"Number":"xxxxxxx",
"MessageParts":[{"MsgId":"id",
"PartId":1,
"Text":"test msg"}]
}]}

Pero cuando lo hace la llamada en mi proyecto me sale el mismo mensaje exacto, pero el campo de texto viene así:

"Text":"test%20msg"

y el texto sended a que el teléfono está sended con el "20%", y eso no es lo que quiero, la respuesta está viniendo mal.

este es mi código de Java en el momento:

    UriComponentsBuilder builder = UriComponentsBuilder
         .fromUriString(env.getProperty("smsProviderUrl"))
         // Add query parameter     
         .queryParam("user", env.getProperty("smsUser"))
         .queryParam("password", env.getProperty("smsPassword"))
         .queryParam("msisdn", new Object[] {number})
         .queryParam("sid", sendedID)
         .queryParam("msg", body)                           
         .queryParam("fl", env.getProperty("smsFl"));

    RestTemplate template = this.restTemplate();

    List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();        

    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();

    converter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML));   

    messageConverters.add(converter);  

    template.setMessageConverters(messageConverters);


    SmsResponseDTO response = template.getForObject(builder.toUriString(), SmsResponseDTO.class);

esto son las cabeceras enviadas en el navegador:

Content-Type: text/html; charset=utf-8

Y después de usar Wireshark para obtener los paquetes Me pareció que esta es la cabecera enviado desde Java

Accept: text/html\r\n

Ya he intentado añadir la codificación UTF-8 juego de caracteres pero no funcionó, y yo creo que UTF-8 está configurado por defecto, así que no estoy seguro si ese es el problema, yo creo que tiene algo que ver con cabeceras no estoy seguro.

¡Gracias!

Charles Dowbecki:

Lo más probable es que codifica la petición URI dos veces. Inicio al confirmar que bodyno contiene %20ya, asegúrese de que este es el mensaje de texto sin formato.

A continuación, convertir manualmente UriComponentsBuildera Stringcon:

String uri = UriComponentsBuilder
     .fromUriString(env.getProperty("smsProviderUrl"))
     // Add query parameter     
     .queryParam("user", env.getProperty("smsUser"))
     .queryParam("password", env.getProperty("smsPassword"))
     .queryParam("msisdn", new Object[] {number})
     .queryParam("sid", sendedID)
     .queryParam("msg", body)                           
     .queryParam("fl", env.getProperty("smsFl"))
     .encode()
     .build()
     .toUriString();

y confirman que contiene URI &msg=test%20msgy no &msg=test%2520msg. Se dan cuenta de que la doble codificación cambiará %a %25.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=211334&siteId=1
Recomendado
Clasificación