java - 是否可以将变量用作@JsonRootName?

标签 java json spring serialization

我有一个类似的 spring 项目和类,想生成以根名称为类型的 json。这是一个例子:

public class Person {
  private String type; //worker
  private String name; //Dennis
  private String surname; //Ritchie
}

结果应该是:

{"worker" : {
   "name" : "Dennis" ,
   "surname" : "Ritchie"
   }
}

我可以使用像@JsonRootName 这样的 Json 标签来实现吗?还是我应该为 worker 编写一个类并扩展 Person 类(有 3 种不同的类型)?

最佳答案

当您需要将对象序列化为具有不同形式的 JSON 时,您可以实现自定义序列化程序:

public class PersonSerializer extends JsonSerializer<Person> {
    @Override
    public void serialize(Person person, JsonGenerator jgen, SerializerProvider provider) 
        throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeFieldName(person.getType());
        jgen.writeStartObject();
        jgen.writeFieldName("name", person.getName());
        jgen.writeFieldName("surname", person.getSurname());
        jgen.writeEndObject();
        jgen.writeEndObject();
    }
}

之后,就可以在类上注册序列化器了:

@JsonSerialize(using = PersonSerializer.class)
public class Person {
    private String type; 
    private String name; 
    private String surname; 
}

关于java - 是否可以将变量用作@JsonRootName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38293068/

相关文章:

java - Unknown ordinal value [46] for enum class error with Hibernate

java - 注释@ConditionalOnMissingBean 在测试中不匹配

java - 在主视图模板的头部创建表单

php - 在 composer.json 中运行命令行命令

使用 hasOwnProperty 的 JavaScript/JSON 递归逻辑问题

java - 使用 Spring Security 成功登录后服务器连接丢失

java - 为什么 SetMinimumSize 设置最小高度而不是宽度?

java - Java 中多种类型对象的高效重复检查

java - 无法在 Gson 自定义解串器中初始化 Android.Util.Pair

java - localeChangeInterceptor 不起作用