我们有一整套在 Apache CXF 和 Jackson 之上运行的 JAX-RS REST 服务。我们使用 JAXB 注释来处理将 POJO 编组为 JSON,效果很好。
但是,我们有一两个地方想要返回原始 JSON 字符串(我们从 Redis 缓存中获取)。
Jackson 总是将字符串用双引号括起来并转义其中的所有双引号,例如
@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) 添加到对象映射器中,但没有任何效果。唯一有效的是,如果我将媒体类型设置为纯字符串,这绕过了杰克逊,但不好,因为我返回了错误的内容类型
IE
return Response.ok(json,"text/plain").build()
有效,但效果不佳(错误的内容类型,这会破坏调用我们的 .Net WCF 应用程序)