2017-10-08 26 views
1

我使用JAXB标注序列化与Spring /反序列化对象。使用JAXB注释时,如何解开了JSON根?

这是我的响应等级:

@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; 
    } 

} 

我想这样

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

一个JSON我试图解开根元素,但我所有的解决方案没有奏效:

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

2)我试图使用@Json序列化

@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上面提到的?

+0

和你现在得到些什么? – araknoid

回答

1

我只是用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; 
    } 
} 

输出

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