当名称中存在混合骆驼大小写时如何[从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 处抢劫。