【发布时间】:2016-09-17 07:10:05
【问题描述】:
我正在使用 Jersey 来实现 RESTful 网络服务。现在我返回数据的 MediaType 是 JSON。
@GET
@Produces({MediaType.APPLICATION_JSON })
public Response service() {
return Response
.ok(entity)
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
.build();
}
这里我将CONTENT_TYPE设置为json,我的实体将被Jersey框架转换为json。
现在我想自定义我的 json 响应。
例如:我想删除空元素或更改我的 Json 对象的键名。 默认 Jersey 的 Json 转换:
{
"cinter" : {
"state" : 1,
"checks" : 10,
}
}
我想要什么:
{
"cin" : {
"st" : 1,
"cs" : 10,
}
}
我知道我可以使用 Jackson 库的我自己的 ObjectMapper 来根据我的需要自定义我的 Json。
但是,如果我想以不同于 Jersey 的默认转换的方式进行 JSON 转换,这是标准的方法吗??
或者我可以更改 Jersey 的 ObjectMapper 中的参数吗??
我应该使用自己的ObjectMapper 吗?
【问题讨论】:
-
你的 POJO 长什么样?因为使用@JsonProperty(name="cit") 等上面的字段名称可以轻松解决。如果你不能改变你的 pojo,那么是的,你必须在你身上使用自定义 Mixin 或序列化器
ObjectMapper -
@My POJO 有 JAXB 注释 (@XmlRootElement) 是的,我无法更改它们。因此,对于每个不同的响应,我应该以不同的方式配置
ObjectMapper吗?关于ContextResolver的任何想法? -
您不能更改它们,但您可以添加注释吗?如果可以的话,
@JsonProperty在属性上,@JsonRootName在类上解决你的问题
标签: java json jersey jackson jax-rs