掲示板

JSON services response ISO-8859

11年前 に Moisés Belda によって更新されました。

JSON services response ISO-8859

Junior Member 投稿: 61 参加年月日: 11/01/25 最新の投稿
Hola!

He creado un web service json siguiendo los pasos de la documentación oficial. Lo he hecho con acceso publico sin autentificación para hacer pruebas.
Se accede por get con una url tipo REST.=> Ejemplo: http://localhost:8080/portlet/api/jsonws/obtenerCadena/parametro1/valor1/parametro2/valor2

En su Servicio Remoto asociado (CadenasServiceImpl) he creado la función adecuada que acepta dos valores y monta un objeto JSON de respuesta. En el web.xml del portlet, he hecho las definiciones adecuadas para que acceda a este. El servicio funciona perfectamente, y me devuelve la cadena JSON esperada. El problema es que la respuesta siempre me la devuelve en ISO-8859. La solicitud se envía en UTF-8, e incluso fuerzo la llamada con Content-Type: text/plain; charset=utf-8, pero siempre me devuelve:

Content-Type: text/javascript; charset=ISO-8859-1

A consecuencia de esto ya sea desde una web, cliente java, etc... siempre me devuelve carácteres extraños cuando hay palabras acentuadas, eñes, etc..

He revisado la configuración de TOMCAT:
- server.xml => <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- setenv.sh/setenv.bat (máquina virtual) => -Dfile.encoding=UTF8

A que puede ser debido? Que otra configuración debe hacerse para que la respuesta del servicio JSON sea en UTF-8?
11年前 に Moisés Belda によって更新されました。

RE: JSON services response ISO-8859

Junior Member 投稿: 61 参加年月日: 11/01/25 最新の投稿
Moisés Belda:
Hola!

He creado un web service json siguiendo los pasos de la documentación oficial. Lo he hecho con acceso publico sin autentificación para hacer pruebas.
Se accede por get con una url tipo REST.=> Ejemplo: http://localhost:8080/portlet/api/jsonws/obtenerCadena/parametro1/valor1/parametro2/valor2

En su Servicio Remoto asociado (CadenasServiceImpl) he creado la función adecuada que acepta dos valores y monta un objeto JSON de respuesta. En el web.xml del portlet, he hecho las definiciones adecuadas para que acceda a este. El servicio funciona perfectamente, y me devuelve la cadena JSON esperada. El problema es que la respuesta siempre me la devuelve en ISO-8859. La solicitud se envía en UTF-8, e incluso fuerzo la llamada con Content-Type: text/plain; charset=utf-8, pero siempre me devuelve:

Content-Type: text/javascript; charset=ISO-8859-1

A consecuencia de esto ya sea desde una web, cliente java, etc... siempre me devuelve carácteres extraños cuando hay palabras acentuadas, eñes, etc..

He revisado la configuración de TOMCAT:
- server.xml => <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
- setenv.sh/setenv.bat (máquina virtual) => -Dfile.encoding=UTF8

A que puede ser debido? Que otra configuración debe hacerse para que la respuesta del servicio JSON sea en UTF-8?


Hola

He encontrado el problema... En liferay 6.1 GA1, en la clase com.liferay.portal.struts.JSONAction.java

			response.setContentType(ContentTypes.TEXT_JAVASCRIPT);
		


Y buscando en el código de la 6.1 GA2....

                        response.setCharacterEncoding(StringPool.UTF8);
			response.setContentType(ContentTypes.TEXT_JAVASCRIPT);
		


Es un bug! Arreglado en la GA2... pero desafortunadamente, no puedo hacer upgrade a GA2 en este servidor...

Alguna idea que no sea usar un EXT?