我正在使用 Jackson Object Mapper 和 MixIn 类将对象(我无权访问的代码)映射到 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/