2017-10-08 60 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" 
    } ] 
}