当名称

时间:2015-06-12 08:43:46

标签: java jackson dropwizard

我使用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类,否则它们是相同的对象。

告诉杰克逊接受 名称的正确方法是什么?

我知道@JsonProperty例如

@JsonProperty("Name")
private String name;

然而,即使这适用于" name"并且"名称",感觉有点不整洁。对我来说,声明这个注释应该有效地意味着忽略编码字段名称以支持注释。

提前致谢

1 个答案:

答案 0 :(得分:3)

您可以查看可以为正在使用的ObjectMapper定义的PropertyNamingStrategy

如果另一方对所使用的约定不灵活(不接受大写和小写形式),您可以为不同的服务使用者(当您是生产者时)定义不同的策略。

如果您有能力使用Jackson 2.5,那么您可以查看mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)

要完全控制杰克逊(德)序列化过程,请在custom serializationcustom deserialization处获取战利品。