Spring MVC REST

Spring bietet auch eine Lösung für REST-basierte Webservices (das Paket nennt sich spring-web) - gehört zum Spring MVC Paket. Es tritt damit in Konkurrenz zu vielen in der Java-Welt existierenden REST-Implementierungen (u. a. JAX-RS JSR-339).

Wie bei Spring üblich wird viel mit Java-Annotationen gearbeitet:

  • @RestController

  • @RequestMapping

  • @RequestBody

  • @RequestParam

  • @ResponseBody

  • @ResponseStatus


Marshalling/Unmarshalling

  • funktioniert über die sog. HttpMessageConverter

  • JSON-based-Payload funktioniert out-of-the-box schon sehr gut

  • XML-base-Payload ... hier bietet sich JAXB an

  • andere Formate kann man natürlich auch verwenden, doch muß man sich dann evtl. selbst um das Marshalling/Unmarshalling kümmern

HttpEntity, RequestEntity, ResponseEntity

HttpEntity repräsentiert eine HttpRequest (RequestEntity) oder HttpResponse (= ResponseEntity).

RequestEnity

ResponseEnity

Eine @RestController-Schnittstelle

kann auch als

modelliert werden. Verwendet man die FooEntity Objekte, so hat man mehr Informationen (z. B. HTTP-Status-Code-Value und Http-Header).

ResponseStatus

Exceptions kann man direkt mit einem ResponseStatus (HTTP-Code) verknüpfen:

In der HttpServletResponse landet in diesem Fall automatisch ein HttpStatus.NOT_FOUND (404).

Zugriff per RestTemplate

siehe Abschnitt zum Testen


Vergleich zu Jax-RS

JAX-RS ist eine Java-Community Specifikation (JSR-339), zu der es unterschiedliche Implementierungen gibt. Apache CXF liefert eine solche Implementierung. Spring REST implementiert NICHT den JAX-RS-Standard ... insofern handelt es sich um einen proprietären Ansatz.

Annotationslevel

Bei JAX-RS werden Webservices auf Interface-Level spezifiziert, bei Spring REST hingegen auch Class-Level.

RestTemplate für REST-Clients

Spring bietet mit dem RestTemplate einen Client für REST-Services. Das besondere an diesem Ansatz ist, daß er mit verschiedenen unterliegenden HTTP-Bibliotheken funktioniert. Per Default (bei Nutzung über new RestTemplate()) wird Standard JDK verwendet werden, um HTTP-Verbindungen zu initiieren (hier verwendet man System-Properties wie javax.net.ssl.trustStore für die Konfiguration des Truststores). Man kann allerdings auch andere Bibliotheken nutzen ... wie hier z. B. Apache HttpComponents (HttpComponentsClientHttpRequestFactory):

Last updated

Was this helpful?