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

标签 java json jackson

我正在使用 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/

相关文章:

javascript - JSON.parse 错误(未捕获的 SyntaxError : Unexpected token o in JSON at position 1)

json - Jackson 反序列化 ... 意外 token (END_OBJECT),

rest - JAXB Jackson - 如何处理 map ?

php - 来自 phpmyadmin 数据库的 Google 图表

javascript - 通过 JSON 中的键查找值

java - Erro : MethodHandle. invoke 和 MethodHandle.invokeExact 仅支持从 Android O (--min-api 26) 开始

java - springdoc-openapi-ui的Gradle依赖关系

java - 使用 Jackson 直接流式传输 JSON 以进行响应

Java/Eclipse : returning to List casted Map. 值()

java - 开发一个工具来知道谁连接到远程机器?