java - 升级到 Json 2.25 后 Json 响应发生变化

标签 java json jersey jersey-2.0

从 Jersey 1.19 升级到 Jersey 2.25 后,我的 json 响应发生了变化。

我有一个属性如下。

 @XmlElementWrapper(name = "items")
 @XmlElement(name = "contact")
 public List<Contact> items = new ArrayList<Contact>();

Jersey 1.19

JSON

{
    "items": [
        {
        "id": "510651"
        }
    ]
}

XML

<items>
    <contact>
        ..
        ..
    </contact>
</items>

升级到jersey 2.25后,xml似乎没问题,但Json有问题。

升级后的Json

{
  "contact": [
        {
          "id": "510651"
        }
    ]
}

我的 Jersey 配置如下

 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了解详情

关于java - 升级到 Json 2.25 后 Json 响应发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41821586/

相关文章:

java - 如何对还包含对象列表的对象列表执行 DFS

java - Spring Integration - 异常和重试

c# - 使用 C# 将数据发送到接受 JSON 数据的通用处理程序

javascript - $resource 在 AngularJS 中响应一个空数组

Java Spring Web Application 在 Debug模式下启动缓慢

java - 将服务类与泛型绑定(bind)

Java for 循环评估

java - Android - 来自 Retrofit 回调响应的 token

javascript - 访问/处理每个(嵌套)对象、数组或 JSON

maven - 无法将 Web 应用程序部署到 debian 虚拟服务器上的 tomcat7