gpt4 book ai didi

使用 mixin 和更改的 getter 进行 JAVA 对象映射器序列化

转载 作者:行者123 更新时间:2023-11-30 08:35:14 25 4
gpt4 key购买 nike

我正在使用 Jackson Object MapperMixIn 类将对象(我无权访问的代码)映射到 json 中。所以,例如我有这个对象:

public class Person {
private String name;
private String surname;

public Person (String name, String surname) {
this.name = name;
this.surname = surname;
}

public String getName() {
return name;
}

public String getSurname() {
return surname;
}
}

和这样的 MixIn 类:

abstract class MixIn {
@JsonIgnore
abstract String getSurname(); // we don't need this in json output!
}

这很好用。但是,如果我需要更改 "getName()" getter 的输出以像 return person.name + ""+ person.surname 那样返回怎么办?

这甚至可以通过特定的对象映射器配置来完成吗?(当我无权访问 Person 类代码时)

最佳答案

您可以编写自定义序列化程序:

class PersonSerializer extends JsonSerializer<Person> {
@Override
public void serialize(Person person, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeStartObject();
generator.writeStringField("name", person.getName() + " " + person.getSurname());
generator.writeEndObject();
}
}

然后,有多种方法可以注册它,例如使用模块:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Person.class, new PersonSerializer());
mapper.registerModule(module);

System.out.println(mapper.writeValueAsString(new Person("user", "1827257")));

关于使用 mixin 和更改的 getter 进行 JAVA 对象映射器序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com