java - 使用 JAXB 注释时如何解开 JSON 的根?

标签 java json spring serialization jaxb

我使用 JAXB 注释通过 Spring 序列化/反序列化对象。

这是我的响应类:

@XmlRootElement(name = "animals")
public class PetClinic implements Serializable {

    @XmlElementWrapper(name = "animals")
    @XmlElement(name = "animal")
    private Collection<Animal> animals;

    public Collection<Animal> getAnimals() {
        return animals;
    }

    public void setAnimalsCollection<Animal> animals) {
        this.animals = animals;
    }

}

我想要得到这样的 JSON

{
    "animals": [
        {...}, 
        {...}
    ]
}

我尝试解开根元素,但我所有的解决方案都不起作用:

1)我尝试在字段上使用@JsonUnwrapped注释

2)我尝试使用@JsonSerialize

@JsonSerialize(using = PetClinicSerializer.class)

序列化器代码:

ObjectMapper mapper = new ObjectMapper();

@Override
public void serialize(PetClinic clinic, JsonGenerator generator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
    mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
    String clinicAsString = mapper.writeValueAsString(clinic);
    generator.writeString(clinicAsString);
}

如何获取上面提到的 JSON?

最佳答案

我只是使用了 ObjectMapper 而没有任何 jaxb 表示法,并得到了所需的结果:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;

public class PetClinic implements Serializable {

    private Collection<Animal> animals;

    public Collection<Animal> getAnimals() {
        return animals;
    }

    public void setAnimals(Collection<Animal> animals) {
        this.animals = animals;
    }

    public static void main(String[] args) throws Exception {
        PetClinic pc = new PetClinic();
        Animal cat = new Animal();
        cat.setName("cat");
        Animal dog = new Animal();
        dog.setName("dog");
        pc.setAnimals(Arrays.asList(cat, dog));
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        String s = mapper.writeValueAsString(pc);
        System.out.println(s);

    }

}

class Animal {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Output

{
  "animals" : [ {
    "name" : "cat"
  }, {
    "name" : "dog"
  } ]
}

关于java - 使用 JAXB 注释时如何解开 JSON 的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46635603/

相关文章:

java - Java 11 中的 CharSequence 接口(interface)添加了方法 `compare` 。 Comparable接口(interface)的 `compareTo`为什么不是?

java - 哪种迭代for循环的方式更好?

java - 将 XMLGregorianCalendar 转换为日期,即 "MM/DD/YYYY hh:mm:ss AM"

javascript - 对象的JSON.stringify仅返回{}

java - Spring Boot 集成测试不读取属性文件

java - Spring-boot 应用程序不会在 docker 内启动时启动

java - 为什么 String.intern() 方法会返回两个不同的结果?

javascript - 无法使用jquery的attr()获取div属性

c# - Json 中的键和值

java - 无法解析 LocalDateTime 中日期和时间之间的空格