升级到 Json 2.25 后 Json 响应发生变化
Change in Json response after upgrade to Json 2.25
从 Jersey 1.19 升级到 Jersey 2.25 后,我的 json 响应发生了变化。
我有一个 属性 如下。
@XmlElementWrapper(name = "items")
@XmlElement(name = "contact")
public List<Contact> items = new ArrayList<Contact>();
球衣 1.19
JSON
{
"items": [
{
"id": "510651"
}
]
}
Xml
<items>
<contact>
..
..
</contact>
</items>
升级到 jersey 2.25 后,xml 似乎没问题,但 Json 有问题。
Json升级后
{
"contact": [
{
"id": "510651"
}
]
}
我的球衣配置如下
public JerseyConfig() {
packages("my.api");
property(ServerProperties.WADL_FEATURE_DISABLE, true);
register(RequestContextFilter.class);
register(JacksonFeature.class);
register(CacheControlFilter.class);
register(GZipEncoder.class);
register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO,
LoggingFeature.Verbosity.PAYLOAD_TEXT, 10 * 1024));
register(new AbstractBinder() {
@Override
public void configure() {
bindFactory(LocaleFactory.class).to(Locale.class).in(RequestScoped.class);
}
});
}
Jersey
使用 jackson
生成 JSON
并且在 jackson
2.x 中更改了此功能。您可以找到更多详细信息 here
所以,如果你想有类似的行为,那么你需要配置 USE_WRAPPER_NAME_AS_PROPERTY_NAME
mapperFeature
-
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true);
现在,这个自定义对象映射器需要在 Jersey
中注册。检查 this 了解详情
从 Jersey 1.19 升级到 Jersey 2.25 后,我的 json 响应发生了变化。
我有一个 属性 如下。
@XmlElementWrapper(name = "items")
@XmlElement(name = "contact")
public List<Contact> items = new ArrayList<Contact>();
球衣 1.19
JSON
{
"items": [
{
"id": "510651"
}
]
}
Xml
<items>
<contact>
..
..
</contact>
</items>
升级到 jersey 2.25 后,xml 似乎没问题,但 Json 有问题。
Json升级后
{
"contact": [
{
"id": "510651"
}
]
}
我的球衣配置如下
public JerseyConfig() {
packages("my.api");
property(ServerProperties.WADL_FEATURE_DISABLE, true);
register(RequestContextFilter.class);
register(JacksonFeature.class);
register(CacheControlFilter.class);
register(GZipEncoder.class);
register(new LoggingFeature(Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), Level.INFO,
LoggingFeature.Verbosity.PAYLOAD_TEXT, 10 * 1024));
register(new AbstractBinder() {
@Override
public void configure() {
bindFactory(LocaleFactory.class).to(Locale.class).in(RequestScoped.class);
}
});
}
Jersey
使用 jackson
生成 JSON
并且在 jackson
2.x 中更改了此功能。您可以找到更多详细信息 here
所以,如果你想有类似的行为,那么你需要配置 USE_WRAPPER_NAME_AS_PROPERTY_NAME
mapperFeature
-
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true);
现在,这个自定义对象映射器需要在 Jersey
中注册。检查 this 了解详情