当名称中存在混合骆驼大小写时如何[从JSON反序列化为pojo对象
How to [de]serialize to pojo objects from JSON when there is mixed camel case in names
我正在使用 Dropwizard(它在后台使用 Jackson)来创建桥接 API 服务。它连接到另外两个非常相似的 API(API1 和 API2)。
我有自己的 POJO 库,其中包含 API1 和 API2 的请求和响应 POJO。这两个 API 之间的唯一区别是对于某些对象 API1 发出大写键,而另一个则不发出。基本上 API1 在 Java 中实现,API2 在 .NET 中实现,但两者提供相同的数据。
{
"Name" : "foo",
"Address" : "bar"
}
对比
{
"name" : "foo",
"address" : "bar"
}
我想避免为每个对象编写一个 POJO class,否则它们是相同的对象。
告诉杰克逊接受任一名字的正确方法是什么?
我知道 @JsonProperty
例如
@JsonProperty("Name")
private String name;
然而,即使这对 "name" 和 "Name" 都有效,但感觉有点不整洁。对我来说,声明此注释实际上意味着忽略编码字段名称以支持注释。
提前致谢
你可以看看PropertyNamingStrategy,你可以为正在使用的ObjectMapper定义。
如果对方对使用的约定不灵活(不接受大写和小写形式),您可以为不同的服务消费者(当您是生产者)定义不同的策略。
如果你有能力使用 Jackson 2.5,那么你可以看看 mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
要完全控制 Jackson(反)序列化过程,请在 custom serialization and custom deserialization 处抢劫。
我正在使用 Dropwizard(它在后台使用 Jackson)来创建桥接 API 服务。它连接到另外两个非常相似的 API(API1 和 API2)。
我有自己的 POJO 库,其中包含 API1 和 API2 的请求和响应 POJO。这两个 API 之间的唯一区别是对于某些对象 API1 发出大写键,而另一个则不发出。基本上 API1 在 Java 中实现,API2 在 .NET 中实现,但两者提供相同的数据。
{
"Name" : "foo",
"Address" : "bar"
}
对比
{
"name" : "foo",
"address" : "bar"
}
我想避免为每个对象编写一个 POJO class,否则它们是相同的对象。
告诉杰克逊接受任一名字的正确方法是什么?
我知道 @JsonProperty
例如
@JsonProperty("Name")
private String name;
然而,即使这对 "name" 和 "Name" 都有效,但感觉有点不整洁。对我来说,声明此注释实际上意味着忽略编码字段名称以支持注释。
提前致谢
你可以看看PropertyNamingStrategy,你可以为正在使用的ObjectMapper定义。
如果对方对使用的约定不灵活(不接受大写和小写形式),您可以为不同的服务消费者(当您是生产者)定义不同的策略。
如果你有能力使用 Jackson 2.5,那么你可以看看 mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
要完全控制 Jackson(反)序列化过程,请在 custom serialization and custom deserialization 处抢劫。