我使用 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
返回,该怎么办?
这是否可以通过特定的Object Mapper配置来实现?(当我对
答案 0 :(得分:1)
您可以编写自定义序列化程序:
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")));
答案 1 :(得分:1)
您可能希望在不同情况下以不同方式序列化对象,因此首选使用mixins:
objectMapper.getSerializationConfig().addMixInAnnotations(Person.class, MixIn.class);
String json = objectMapper.writeValueAsString(new Person("user", "1827257"));
答案 2 :(得分:-1)
您可以使用https://github.com/google/gson/代替当前的JSON库。 它允许您非常容易地序列化对象:
String json = new Gson().toJson(yourObjectInstance);
(https://github.com/google/gson/blob/master/gson/src/main/java/com/google/gson/Gson.java#L579)