Vous pouvez obtenir ceci à partir de la configuration seulement, pas besoin de programmer quelque chose de spécial. Voici comment: d'abord définir votre droit de configuration, j'utilise Jackson + JAXB, à la fois mis en haricot ContentNegotiatingViewResolver:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"/>
<property name="mediaTypes">
<map>
<entry key="xml" value="application/xml" />
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<oxm:jaxb2-marshaller id="marshaller">
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.page.PageObject" />
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.tab.TabObject" />
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.section.SectionObject" />
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.element.nonembedded.ElementObject"/>
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.element.embedded.EmbeddedElementObject"/>
<oxm:class-to-be-bound name="com.shay.dashboard.data.structure.chart.common.ChartManager"/>
</oxm:jaxb2-marshaller>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/>
</list>
</property>
</bean>
Notez que sous le placier, je mets la OXM: classe-être à bound - les sont les classes à être lié par JAXB.
Maintenant, pour le module, j'ai utilisé un paquet d'annotations ordinaires (javax.xml.bind.annotation), non spécifique au marshaller. Jackson Json et JAXB savent tous les deux comment le lire.
Par exemple:
@XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name="page") public class PageObject implements ComponentTypeObject{ @XmlAttribute(name="name") private String name; @XmlAttribute(name="id",required=true) private String id;
@XmlElements({@XmlElement(name="tab", type=TabXmlAdapter.class)}) private List<TabXmlAdapter> tabRef;
Enfin, le contrôleur pour votre MVC doit retourner un modèle et vue:
@RequestMapping(value="/get_page", method = RequestMethod.GET)
public ModelAndView initPage()
{
ModelAndView mav = null;
try
{
PageObject myPage = (PageObject) Utilities.getUtilities().loadObjectFromFile(XmlComponentType.page);
mav = new ModelAndView("page","page",myPage);
}
catch (Exception e)
{
e.getMessage();
}
return mav;
}
Maintenant, tout en appelant votre URL se terminant par .json vous obtiendrez la représentation JSON et avec .xml - et XML. Les deux sont traduits par le visualiseur, à condition que vous ayez donné le mappage correct lors de l'annotation du module.
Votre solution fonctionne si le réseau à ressort ou le ressort-mvc est utilisé pour l'expédition. J'utilise RESTEasy. Merci. – Kamlesh
oh, n'a pas remarqué, était trop pressé de répondre :) – jazzcool