【问题标题】:Change in Json response after upgrade to Json 2.25升级到 Json 2.25 后 Json 响应的变化
【发布时间】:2017-01-24 06:40:10
【问题描述】:

从 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);
      }
    });
  }

【问题讨论】:

    标签: java json jersey jersey-2.0


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多