Vor einiger Zeit schrieb ich einen Artikel über Spring REST JSON und erhielt viele Kommentare mit der Frage, wie das Programm geändert werden kann, um XML zu unterstützen. Ich erhielt auch einige E-Mails mit der Frage, wie man die Anwendung sowohl XML als auch JSON unterstützen lässt.
Spring REST XML und JSON
Führen Sie nun folgende Änderungen in der Spring Bean-Konfigurationsdatei durch.
1. Definieren Sie einen Bean vom Typ Jaxb2RootElementHttpMessageConverter
<beans:bean>
</beans:bean>2. Fügen Sie den konfigurierten Bean zum RequestMappingHandlerAdapter hinzu
<beans:bean>
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
<beans:ref bean="xmlMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>Nach den oben genannten Änderungen sieht unsere finale Spring-Bean-Konfigurationsdatei wie folgt aus. servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: definiert die Anfrageverarbeitungsinfrastruktur dieses Servlets -->
<!-- Aktiviert das Spring MVC @Controller-Programmiermodell -->
<annotation-driven />
<!-- Verarbeitet HTTP-GET-Anfragen für /resources/**, indem statische Ressourcen im Verzeichnis ${webappRoot}/resources effizient bereitgestellt werden -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Löst Ansichten aus, die von @Controllers zur Darstellung ausgewählt wurden, zu .jsp-Ressourcen im Verzeichnis /WEB-INF/views -->
<beans:bean>
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- Konfiguriert das Plugin für JSON als Anfrage- und Antwortverarbeitung im Methodenhandler -->
<beans:bean>
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
<beans:ref bean="xmlMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
<!-- Konfiguriert den Bean, um JSON in POJO umzuwandeln und umgekehrt -->
<beans:bean>
</beans:bean>
<beans:bean>
</beans:bean>
<context:component-scan base-package="com.journaldev.spring.controller" />
</beans:beans>Wir wissen, dass für das Arbeiten mit JAXB-Marshalling für eine Klasse, diese mit der Annotation @XmlRootElement annotiert werden muss. Fügen Sie dies also unserer Employee-Modellklasse hinzu. Employee.java
@XmlRootElement
public class Employee implements Serializable{
//keine Änderung im Code
}Das war's, wir sind FERTIG. Unsere Spring-Anwendung wird sowohl JSON als auch XML unterstützen. Sie wird sogar XML-Anfragen mit JSON-Antwort und umgekehrt unterstützen. Unten sind einige Screenshots, die dies in Aktion zeigen. HINWEIS: Ich verwende für diese Tests die Postman Chrome-Anwendung, Sie können aber jeden beliebigen REST-Client verwenden.
1. XML-Antwort
Stellen Sie sicher, dass Sie den Accept-Header als „application/xml“ übergeben.
2. JSON-Antwort
Stellen Sie sicher, dass Sie den Accept-Header als „application/json“ übergeben.
3. XML-Anfrage mit JSON-Antwort
Stellen Sie sicher, dass der Accept-Header „application/json“ und der Content-Type-Header „text/xml“ ist, wie in den folgenden Bildern gezeigt.
Passende Infrastruktur bei centron
Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →
Fazit
Das ist alles für das Spring Restful-Webdienste-Beispiel zur Unterstützung von sowohl XML als auch JSON. Sie können sehen, wie einfach es ist, das Spring-Framework zu erweitern, dies ist einer der Hauptgründe für die Beliebtheit des Spring-Frameworks.
Testen Sie Ihr Setup auf ccloud³
Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.