Tenemos un conjunto completo de servicios JAX-RS REST que se ejecutan en la parte superior de Apache CXF y Jackson. Usamos anotaciones JAXB para encargarnos de organizar POJOs en JSON, funciona muy bien.¿Cómo pasar raw JSON a través de Jackson?
Sin embargo, tenemos uno o dos lugares en los que queremos devolver cadena JSON sin procesar (que recuperamos de un caché Redis).
Jackson siempre ajusta la cadena entre comillas dobles y escapa de todas las comillas dobles, p. Ej.
@GET @Produces("application/json")
public Response getData() {
String json = ...get from Redis...
return Response.ok(json,"application/json").build()
}
nos da
"{\"test\":1}"
en lugar de
{"test":1}
He intentado varias cosas, la adición de RawSerializer (String.class) para el mapeador de objetos, nada funciona. Lo único que funciona es si fijo el tipo de medio de cadena sencilla, que omite Jackson, pero no es bueno, ya que estoy devolviendo el contenido incorrecto tipo
es decir
return Response.ok(json,"text/plain").build()
obras, pero mal (tipo de contenido incorrecto, que daña las aplicaciones .Net WCF que nos llaman)
Tuve que usar un mapa en su lugar y dejar que Jersey lo analizara correctamente ... Agregué JacksonJsonProvider con mapper.setVisibility (PropertyAccessor.FIELD, Visibility.ANY); –