【问题标题】:how to use @JsonProperty in this case - jackson API with lombok在这种情况下如何使用@JsonProperty - jackson API with lombok
【发布时间】:2017-09-01 12:04:23
【问题描述】:

我知道如何在 jackson API 中使用@JsonProperty,但下面的情况不同。

我已经低于 json sn-p。

{"results":[{"uniqueCount":395}

所以,要使用jackson API 解析上面的 json,我在 java pojo 类下面写了。

package com.jl.models;

import lombok.Data;

@Data
public class Results
{
    private int uniqueCount;

}

后来,我要解析下面类似的json sn-p。

{"results":[{"count":60}

现在,这里的问题是我无法用Results 类解析这个json,因为它需要一个字符串uniqueCount

我可以轻松地创建另一个具有 count 成员变量的 java pojo 类,但我必须创建具有 Results 类实例的所有父 java 类。

那么,有什么方法可以自定义具有lombok 行为的Results 类来解析两个json 而不会相互影响?

提前感谢您的帮助。

【问题讨论】:

  • 你可以去掉Results而只使用List<Integer>,那么只有{"results":[395]}就够了不是吗?
  • 好的.. 感谢您的建议。在前端大量使用 results 对象来解析 json。现在,我必须在所有位置重写。有没有办法在生成 json 时附加结果以避免在前端进行更改?
  • 您可以拥有另一个带有count 字段的Results2 类,并在反序列化时使用这些类中的任何一个,如果您获得第二种类型,则映射到原始Results。尽管我希望您使用我最初的建议,但似乎 uniqueCount 字段不会给您的结构添加任何东西,但会带来麻烦。或者这个 -> stackoverflow.com/a/19566131/3641067 (看起来很可怕 imo)
  • 是的,正如我之前所说,创建一个新类很容易,但我必须重写所有具有Results 类实例的父类,我不想这样做仅仅因为 1 个字段就会导致代码重复。

标签: java json jackson lombok


【解决方案1】:

您可以使用 Jackson 的 @JsonAnySetter 注释将所有未知键指向一个方法,然后您可以自己完成分配:

@Data
public class Results
{
    private int uniqueCount;

    // all unknown properties will go here
    @JsonAnySetter
    public void setUnknownProperty(String key, Object value) {
        if (key.equals("count")) {
            uniqueCount = (Integer)value;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-01-24
    • 2021-06-26
    • 1970-01-01
    • 2022-11-08
    • 2022-01-23
    • 2015-11-30
    • 2017-05-16
    • 2012-10-06
    • 2011-05-18
    相关资源
    最近更新 更多