【发布时间】:2023-04-06 23:43:01
【问题描述】:
我们有一整套 JAX-RS REST 服务在 Apache CXF 和 Jackson 之上运行。 我们使用 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) 添加到对象映射器中,但没有任何效果。唯一可行的是,如果我将媒体类型设置为纯字符串,这绕过了杰克逊,但不好,因为我返回了错误的内容类型
即
return Response.ok(json,"text/plain").build()
有效,但效果不佳(错误的内容类型,会搞砸调用我们的 .Net WCF 应用程序)
【问题讨论】:
-
我不得不改用 Map 并让 Jersey 正确解析它...我添加了 JacksonJsonProvider 和 mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
标签: java json cxf jax-rs jackson