java - 当名称中存在混合驼峰式大小写时,如何从 JSON 序列化为 pojo 对象

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

告诉 jackson 接受任一名字的正确方法是什么?

我知道 @JsonProperty 例如

@JsonProperty("Name")
private String name;

然而,即使这对“name”和“Name”都有效,但感觉有点不整洁。对我来说,声明此注释实际上意味着忽略编码字段名称以支持注释。

提前致谢

最佳答案

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

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

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

要完全控制 Jackson(反)序列化过程,请访问 custom serializationcustom deserialization .

关于java - 当名称中存在混合驼峰式大小写时,如何从 JSON 序列化为 pojo 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30798910/

相关文章:

java - 即使发生异常,如何最好地执行一组方法

java - spring api - jackson 将一个对象序列化为一个数组

java - 错误: java: cannot find symbol symbol: class MockitoJUnitRunner

java - 如何直接访问 Dropwizard 资源,而不是通过 REST

logging - Dropwizard 日志格式 : Method and line is not working

java - Struts 表单 bean 对象创建和连接池

java - Cayenne 缓存 - 查询缓存会取代对象缓存吗?

JavaFx:Bindings.when().then().otherwise() 处的 NPE

java - 在 Retrofit 的 POST 请求中发送空正文

java - Jackson 使用解包根解析 json,但无法设置 @JsonRootName