java - 如何根据 Accepts header 以不同方式序列化 POJO 字段

标签 java json jaxb jackson marshalling

我们有一个包含集合的 POJO,并对其进行了注释:

@XmlElement(name = "<MyId")
@XmlElementWrapper(name = "MyIds")
private final Set<Long> myIds;

我们在 CXF 中使用 JacksonJaxbJsonProvider 在我们的 REST 服务中进行编码。

我们看到的问题是,如果有人请求 application/xml ,响应是正确的,因为用户得到:

<MyIds>
  <MyId>123</MyId>
  <MyId>456</MyId>
  ...
</MyIds>

但是当请求 application/json 时,用户得到(注意单数字段名称):

{
  "MyId" : [123, 456, ...]
}

我想知道是否有办法在 JSON 响应中使用复数形式,如果有,如何实现。

这感觉可能是 jackson 的错误,但发生这种情况可能有充分的理由。另外,我意识到,如果每个人都使用相同的 POJO,我们就不必关心编码文本的样子,但在这种情况下,其中一个消费者无法使用我们的 POJO。

最佳答案

如果您使用的是 Jackson 2.1 或更高版本,可以启用一项功能来获得您想要的行为

ObjectMapper m = new ObjectMapper()
m.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true);

关于java - 如何根据 Accepts header 以不同方式序列化 POJO 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259550/

相关文章:

Java:选择串口读取Arduino Uno

java - Java 中单个统一参数与特定参数 (>= 7)

mysql - 如何在mysql 5.7中的json数组类型上创建索引

javascript - 将 json 数据传递给 javascript 变量

java - 使用 Jackson 将名称值对数组反序列化为对象

java - 为什么 JAXB 2 注册机的 XJC 简单模式会更改集合名称?

java - 使用 Twilio Java Sdk v7.x 将 Twilio Recording 下载为输入流

java - hibernate 多对一 - 当不再有子级时删除父级

Java 将 XML 解码为动态对象

java - Jaxb:通过 xmlns 属性而不是元素前缀进行本地命名空间?