У нас есть целый набор служб JAX-RS REST, работающих поверх Apache CXF и Jackson. Мы используем аннотации JAXB, чтобы позаботиться о сортировке POJO в JSON, отлично работает.
Однако у нас есть одно или два места, где мы хотим вернуть необработанную строку JSON (которую мы получаем из кеша Redis).
Джексон всегда заключает строку в двойные кавычки и экранирует все двойные кавычки в ней, например
@GET @Produces("application/json")
public Response getData() {
String json = ...get from Redis...
return Response.ok(json,"application/json").build()
}
дает нам
"{\"test\":1}"
вместо
{"test":1}
. Я пробовал несколько вещей, добавляя RawSerializer(String.class) в средство сопоставления объектов, ничего не работает. Единственное, что сработает, это если я установлю тип мультимедиа на простую строку, что обошло Джексона, но это нехорошо, так как я возвращаю неправильный тип контента
, т.е.
return Response.ok(json,"text/plain").build()
работает, но плохо (неправильный тип контента, который облажались приложения .Net WCF, которые звонят нам)