Spring REST XML und JSON Beispiel
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 id="xmlMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter">
</beans:bean>
2. Fügen Sie den konfigurierten Bean zum RequestMappingHandlerAdapter hinzu
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<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 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<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 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<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 id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>
<beans:bean id="xmlMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter">
</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.
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.