2010-11-13 18 views
7

Hice una aplicación Spring REST donde puede realizar operaciones CRUD basadas en los métodos HTTP de POST, PUT, GET, DELETE. Tengo la plantilla URI típica deEsquema de codificación de REST URL Spring:% 20 o + ¿Cuál?

http://host/root/{id}/{name}/{address} and etc. 

Tenemos un cliente que está accediendo a este servicio REST. Al parecer, al que se envía parámetros para el nombre de varios términos y dirección de la siguiente forma:

http://host/root/11/John+Smith/10+Las+Vegas+USA 

Están utilizando el esquema de codificación HTML basado en la aplicación escriba/x-www-form-urlencoded. De acuerdo con el artículo en Wikipedia

La aplicación/x-www-form-urlencoded tipo

la codificación utilizada por defecto se basa en una versión muy temprana de los generales URI reglas código porciento , con un número de modificaciones como normalización de nueva línea y reemplazando espacios con "+" en lugar de "% 20". - http://en.wikipedia.org/wiki/Percent-encoding

Sin embargo parece que el esquema de URL estándar de codificación es utilizar% 20 en la sustitución de espacios en las plantillas de URI. ¿Cuál es correcto?

My Spring REST convierte automáticamente% 20 en espacios. Se interpreta correctamente Estoy usando Spring 3.0.4. Cuando + se encuentra con mi servicio REST, se acepta tal como está. Por supuesto, cuando pongo la validación para excluir +, de hecho se excluye como se esperaba.

¿Estoy dentro de las normas o hay un doble estándar? ¿O el cliente está usando un esquema antiguo?

Respuesta

11

El punto es que application/x-www-form-urlencoded se puede usar solo en los parámetros de solicitud, mientras que la codificación porcentual también se admite en una ruta.

Así,

http://host/root/11/?name=John+Smith&address=10+Las+Vegas+USA

está muy bien y será decodificado correctamente Spring MVC, pero

http://host/root/11/John+Smith/10+Las+Vegas+USA

es incorrecto y Spring MVC no decodifica, porque el siguiente formulario se debe utilizar en su lugar:

http://host/root/11/John%20Smith/10%20Las%20Vegas%20USA
+0

Gracias por la respuesta. Es lo que pensaba. El formato "http: // host/root/11/John + Smith/10 + Las + Vegas + USA" es correcto para usar cuando se usa Spring REST como opuesto a Spring MVC. – chris

+0

Con Spring MVC "http: // host/root/11 /? Name = John + Smith & address = 10 + Las + Vegas + USA" es correcto. El formato "http: // host/root/11/John% 20Smith/10% 20Las% 20Vegas% 20USA" también es correcto en términos de Spring MVC. – chris

+0

Ahora cuando le dije a otro programador que tenemos un servicio REST, ¿por qué asumió que usaba el esquema de codificación de la aplicación/x-www-form-urlencoded que convierte los espacios a "+". ¿No es esta una terminología estándar? ¿O es un error suponer que lo saben? ¿O soy yo quien está haciendo la suposición equivocada? – chris

Cuestiones relacionadas