2015-10-23 1 views
2

Je convertis un fichier JSON dans une ArrayList, puis en XML en utilisant Jackson. Il est affiché dans Firefox mais juste comme une chaîne normale. En utilisant l'outil Inspecter l'élément, j'obtiens tout le format XML. Quelle fonction puis-je utiliser pour l'afficher correctement sur le navigateur?Afficher correctement XML dans Firefox avec Jackson

Ma méthode:

private void init() throws JsonParseException, JsonMappingException, IOException { 
    ObjectMapper mapper = new ObjectMapper(); 
    InputStream is = MyClass[].class.getResourceAsStream("/config/myList.json"); 
    myList= Arrays.asList(mapper.readValue(is, MyClass[].class)); 
    XmlMapper xmlMapper = new XmlMapper(); 
    for(MyClass test : myList){ 
     String asXml += xmlMapper.writeValueAsString(test); 
    } 
    LOGGER.info("asXml: {}.", asXml); 
} 

sortie souhaitée dans le navigateur:

<myclass xmlns=""> 
    <myclass>XyClass</ci> 
    <myname>XyName</ci> 
    ... 
</myclass> 

sortie actuelle: XyClassXyName ...

simplifié tout à fait la classe ressemble à ceci:

@JacksonXmlRootElement(localName ="MyClass") 
@JsonIgnoreProperties(ignoreUnknown = true) 
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility =  Visibility.NONE, setterVisibility = Visibility.NONE) 
@JsonInclude(JsonInclude.Include.NON_NULL) 
public class MyClass { 

@XmlElement(required = true) 
private String class; 

@XmlElement(required = true) 
private String name; 
//.... 

//standard constructor 
public MyClass() { } 

public CI(String class, String name){ 
    this.class = class; 
    this.name = name; 
} 

public String getClass() { 
    return class; 
} 

public String getName() { 
    return name; 
} 

public void setClass(String class) { 
    this.class = class; 
} 

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

Une autre chose étrange est que j'ai les annotations exactes dans une autre classe, en essayant la même chose avec ça et là le navigateur n'affiche rien ... Merci pour toute aide.

+0

Quelle version de Jackson vous utilisez? – entpnerd

+0

\t \t com.fasterxml.jackson.dataformat \t \t jackson-dataformat-xml \t \t 2.5.3 \t \t Lyn

+0

Essayer de reproduire votre problème au niveau local. Pourriez-vous inclure votre code MyClass dans votre question? – entpnerd

Répondre

0

Eh bien mon erreur dérivée de deux choses essentiellement. Le plus important est la définition de l'élément racine XML (pas seulement comme annotation dans votre "MyClass"). Définissez une chaîne globale pour créer un élément racine XML, sinon votre document ne sera pas bien formé et l'erreur "indésirable après l'élément de document" s'affichera.

private String asXml ="<?xml version=\"1.0\" encoding=\"utf-8\"?><MyList>"; 

J'ai adapté la méthode:

private void init() throws JsonParseException, JsonMappingException, IOException { 
ObjectMapper mapper = new ObjectMapper(); 
InputStream is = MyClass[].class.getResourceAsStream("/config/myList.json"); 
myList= Arrays.asList(mapper.readValue(is, MyClass[].class)); 
XmlMapper xmlMapper = new XmlMapper(); 
for(MyClass test : myList){ 
    String asXml += xmlMapper.writer().with(SerializationFeature.WRAP_ROOT_VALUE).withRootName("MyClass").writeValueAsString(test); 

} 
LOGGER.info("asXml: {}.", asXml); 
asXml += "</MyList>"; 
} 

Et ne pas oublier d'ajouter le MediaType correct dans votre RestController:

@RequestMapping(value="/display", method=RequestMethod.GET, produces=MediaType.APPLICATION_XML_VALUE) 
public @ResponseBody String getList(Model model) { 
    return service.getAsXmlString(); 
}