我使用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"并且"名称",感觉有点不整洁。对我来说,声明这个注释应该有效地意味着忽略编码字段名称以支持注释。
提前致谢
答案 0 :(得分:3)
您可以查看可以为正在使用的ObjectMapper定义的PropertyNamingStrategy。
如果另一方对所使用的约定不灵活(不接受大写和小写形式),您可以为不同的服务使用者(当您是生产者时)定义不同的策略。
如果您有能力使用Jackson 2.5,那么您可以查看mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
要完全控制杰克逊(德)序列化过程,请在custom serialization和custom deserialization处获取战利品。