jersey de servicio web json codificación utf-8

He hecho un pequeño Descanso webservice usando Jersey 1.11. Cuando yo llame a la url que devuelve Json, hay problemas con la codificación de caracteres no ingleses caracteres. La dirección url correspondiente para Xml («test.xml» hace utf-8 en el punto de partida xml-tag.

¿Cómo puedo hacer que la url de prueba».json» volver codificado en utf-8 respuesta?

Aquí está el código para el servicio:

@Stateless
@Path("/")
public class RestTest {   
    @EJB
    private MyDao myDao;

    @Path("test.xml/")
    @GET
    @Produces(MediaType.APPLICATION_XML )
    public List<Profile> getProfiles() {    
        return myDao.getProfilesForWeb();
    }

    @Path("test.json/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Profile> getProfilesAsJson() {
        return myDao.getProfilesForWeb();
    }
}

Este es el pojo que utiliza el servicio:

package se.kc.mimee.profile.model;

@XmlRootElement
public class Profile {
    public int id;
    public String name;

    public Profile(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public Profile() {}

}
InformationsquelleAutor Jojje | 2012-02-20

7 Kommentare

  1. 98

    Jersey siempre debe producir utf-8 por defecto, parece que el problema es que su cliente no se interprete correctamente (la declaración xml no «hacer» es utf-8, sólo le dirá al cliente cómo analizarlo).

    Lo que el cliente está usted viendo estos problemas?

    Válido JSON se supone que sólo se Unicode (utf-8/16/32); analizadores debe ser capaz de detectar la codificación de forma automática (por supuesto, algunos no), así que no hay declaración de codificación en JSON.

    Usted puede agregar a la Content-Type así:

    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    • Yo estaba viendo el problema con mi navegador Chrome y un resto de cliente de google, pero su sugerencia corrige el problema 🙂
    • 2015 y todavía tengo el problema
    • Me utiliza jersey 1.19 , Mi Entrada es = euzé de, Pero mi servicio devuelve = euzé de. Yo uso la siguiente variación : @Produce(tipo de medio.TEXT_HTML+ «;charset=UTF-8») así como en el lado del cliente, conn.setRequestProperty(«Aceptar», «text/html»+ «;charset=UTF-8»); conn.setRequestProperty(«Content-Type», «application/x-www-form-urlencoded»+ «;charset=UTF-8»);
    • Queridos @Dmitri su solución trabajado para @Produces pero no trabajo para @Consumes, ¿Qué puedo hacer para resolver la codificación de caracteres de error en el consumo de Cadena en el parámetro de entrada?
  2. 5

    Si se agrega el conjunto de caracteres a cada uno y todos los recursos no es una opción, tal vez la respuesta a esta pregunta, que muestra cómo aplicar un conjunto de caracteres predeterminado, podría ser útil.

  3. 5

    si @Produce(tipo de medio.APPLICATION_JSON + «;charset=utf-8») no funciona, inténtelo:

    @Produce(«application/json;charset=utf-8»)

    en teoría es el mismo, pero la primera opción no me

  4. 4

    responseMessage es la clase de bean en la que podemos enviar UTF-8 charset en respuesta.

    return Response.ok(responseMessage).header("Content-Type", "application/json;charset=UTF-8").build();
  5. 1

    Jersey está libre de errores, cuando el Contenido de Tipo application/json se utiliza, no detecta el unicode codificación JSON automáticamente a medida que ello suponga, pero deserializar el cuerpo de solicitud con cualquiera que sea el tiempo de ejecución de la plataforma de codificación utilizado por el servidor. Mismo se aplica para el cuerpo de la respuesta de la serialización.

    El cliente necesita especificar explícitamente UTF-8 caracteres:

    Content-Type: application/json;charset=utf-8
  6. 0

    También puede probar este :

    return Response.ok(responseMessage, "application/json;charset=UTF-8").build();
  7. -1

    tengo el mismo problema en el servlet

    favor use : resp.setContentType(«application/json;charset=utf-8»);

    public static void flashOutput(HttpServletRequest req
                , HttpServletResponse resp
                , String output) {
    
            try {
    
                Utils.print2("output flash"+output);
    
                resp.setContentType("application/json;charset=utf-8");
                PrintWriter pw = resp.getWriter();
                pw.write( new String(output.getBytes("UTF-8")));
                pw.close();
                resp.flushBuffer();
    
            } catch (Exception e) {
                //TODO: handle exception
            }
    
        }//end flashOutput

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea