Primavera de arranque RestTemplate resolver el problema en el carácter de escape URL escapó

Primavera de arranque RestTemplate resolver el problema en el carácter de escape URL escapó

Código utiliza los mismos problemas que se plantean cuando se solicita RestTemplate SpringBoot en diferentes versiones:

        Map<String, Object> param = new HashMap<String, Object>();
            param.put("version","2.0.0");
            String userSing = sign(param);
            param.put("user_sign", userSing);
            logger.info("签名:" + userSing);
            StringBuilder paramStr = new StringBuilder("?");
            for(Map.Entry<String, Object> entry : param.entrySet()){
                paramStr.append(entry.getKey()).append("=")
                        .append(entry.getValue() == null ? "" : String.valueOf(entry.getValue()))
                        .append("&");
            }
            paramStr.deleteCharAt(paramStr.length() - 1);
            logger.info("入参:" + paramStr.toString());
            RestTemplate restTemplate = new RestTemplate();
            String jsonStr = restTemplate.getForObject(sendMessagesUrl + paramStr.toString(), String.class);
            logger.info("响应值:" + jsonStr);

La siguiente captura de pantalla springboot1.5.3 registro de solicitudes RestTemplate
registro de solicitudes springboot1.5.3 RestTemplate

La siguiente captura de pantalla springboot2.1.7 registro de solicitudes RestTemplate
registro de solicitudes springboot2.1.7 RestTemplate

En puede verse en estos valor dos log correspondiente al valor user_sign + es un carácter especial, la versión 1.0 se escapó como: % 2B , versión 2.0 no se escapó, el programa de versión 2.0 final de RestTemplate solicita un tercero por el momento no se decodifica la verificación de la firma.

1. Trata y análisis

De acuerdo con la información anterior podemos delimitar el alcance del problema, = no se transcodifica, las instrucciones pueden estar construidos de manera parámetros de transcodificación RestTemplate en la url HttpClient lo que nada, tratar varios tipos de tratamiento.
Principales métodos utilizados son:

  • UriComponent acumulación uri (sin resolver)

fuente 2. Seguimiento RestTemplate

fuente RestTemplateencontraron user_sign se escaparon pero aquí depuración + no cambió.
urldecodeEn este caso URLDecoder.decode ( "/ QaNSBls / U8ciXEWaCWtmeMK6 + w% 3D") encontrarán + en un cuadro , el tercero es en el momento de la decodificación de la verificación de la firma no se pasa.

Aquí Insertar imagen Descripción
esta permitidoEn comparación volverá a encontrar la versión StringBoot2.0 correspondiente URL transcodificación + no se analiza.

Después de varios Baidu han visto lo siguiente:

De acuerdo con RFC 3986 de hecho puede ocurrir en las más símbolos tales parámetros, y no de codificación, un problema que el servidor no está resuelto veces

3. resolver el problema

Por último, para abordar algunos de los problemas cuando se utiliza RestTemplate iniciar una petición, si los parámetros de la petición necesitan codificación URL para hacer frente a las dos formas siguientes:

  1. Sin querer plantear problemas que se deben pasar con un objeto URI en lugar de una cadena, para modificar los parámetros del método de petición RestTemplate String urlModificar URI url.
  2. Modificada cuando los parámetros de formato de codificación, y luego construir RestTemplate,
  RestTemplate restTemplate = new RestTemplate();
            DefaultUriBuilderFactory uriFactory = new DefaultUriBuilderFactory();
            uriFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
            restTemplate.setUriTemplateHandler(uriFactory);`

resumen

Nota SpringBoot2.0 versión del parámetro de codificación URL, por defecto = y y exclusivamente para la transformación; para la compatibilidad url generalmente back-end procesamiento de parámetros de codificación del codec cuando sea necesario, trate de no usar las recomendaciones personales modo por defecto de Primavera o recibido y se espera que los datos inconsistentes.

Publicado 12 artículos originales · ganado elogios 8 · vistas 3810

Supongo que te gusta

Origin blog.csdn.net/weixin_44739349/article/details/104792926
Recomendado
Clasificación