当前位置: 首页 > 知识库问答 >
问题:

如何让Jackson使用方法将类序列化到JSON?

黄俊誉
2023-03-14

假设我有以下几门课:

public class MyClass {
    private Test t;

    public MyClass() {
        t = new Test(50);
    }
}

public class Test {
    private int test;

    public Test(int test) {
        this.test = test;
    }

    public String toCustomString() {
        return test + "." + test;
    }
}

当Jackson序列化MyClass的实例时,它将如下所示:

test类中是否有任何注释可以强制Jackson在序列化test对象时调用ToCustomString()方法

当Jackson序列化MyClass的实例时,我希望看到以下输出之一:

{“t”:“50.50”}

{“t”:{“test”:“50.50”}}

共有1个答案

柴俊捷
2023-03-14

如果你想生产

{"t":"50.50"}

您可以使用@jsonvalue来指示

带注释的“getter”方法(这意味着签名必须是getters的签名;非void返回类型,没有参数)的结果将被用作实例序列化的单个值。

@JsonValue
public String toCustomString() {
    return test + "." + test;
}
{"t":{"test":"50.50"}}

您可以使用自定义的JSONSerializer

class TestSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeString(value + "." + value);
    }
}
...
@JsonSerialize(using = TestSerializer.class)
private int test;
 类似资料:
  • 我得到了以下代码: 我得到了这个: {"时间":{"小时": 20,"分钟": 49,"秒": 42,"纳米": 99000000,"一天": 19,"一天":"星期四","月":"一月","一天": 19,"年": 2017,"月值": 1,"年表":{"id":"ISO","calendarType":"iso8601"}}} 我要实现的是ISO8601中的字符串 2017-01-19T18:

  • 我正在尝试将我的代码 Json 数组中的这个 元素反序列化为自定义类..但我不能: 这是类: 但是我收到此错误: com.fasterxml.jackson.databind.exc.MismatchedInputException: START_ARRAY无法从 [Source: UNKNOWN; line: -1, column: -1] at com.fasterxml.jackson.da

  • 问题内容: 如何将作为地图的属性序列化为地图的值列表?我已经能够使用吸气剂上的注释进行其他简单的转换。但是,我不确定我想做什么。 问题答案: 我们需要类似的东西,在我们的案例中,我们使用了您所评论的自定义项,这很简单: 使用它的代码:

  • 我有一个JSON,它带有一个包含任意键和值类型的标记,我想将其读入Java中POJO内的映射。映射将是指向JsonValue或JsonNode之类的字符串。我正在使用对象映射器解析json。 有人对如何设置我的POJO来与杰克逊一起完成这一任务有什么建议吗?还是一种更好的方式? Json示例: 映射方法: 我的POJO:

  • 问题内容: 我正在尝试使用Jackson来反序列化存储在CouchDb中的JSON对象。该对象需要反序列化为包含重载方法的pojo。当我尝试从沙发上检索对象并进行反序列化时,出现以下异常: org.ektorp.DbAccessException:org.codehaus.jackson.map.JsonMappingException:属性“乘数”的设置器定义冲突:com.db.commodit

  • 将这些注释应用于mixin没有任何效果。 我发现唯一有效的方法是利用创建的包访问AllArgsConstructor,并用以下构造函数填充mixin 这显然是不可取的,因为它需要显式地迭代和硬编码每个类属性,使得mixin对外部POJO中的任何更改都很脆弱。