Sie können JSON-Anforderungen und -Antworten (JavaScript Object Notation)
mit annotierten JAXB-Objekten (Java™ Architecture for XML Binding) und Jackson verarbeiten. Jackson ist der
Standard-JSON-Prozessor in WebSphere Application Server. Er ist standardmäßig in der JAX-RS-Laufzeitumgebung
enthalten, deshalb ist es nicht erforderlich, Jackson zu konfigurieren.
Informationen zu diesem Vorgang
Diese Task umfasst Anweisungen für die Verarbeitung von JSON-Anforderungen und -Antworten mit annotierten JAXB-Objekten und Jackson.
Vorgehensweise
- Erstellen Sie eine Ressourcenmethode. Damit die Ressourcenmethode JSON-Inhalt zurückgibt, müssen Sie die Instanz einer JAXB-Klasse direkt zurückgeben oder ein
Objekt vom Typ javax.ws.rs.core.Response mit einem JAXB-Objekt als Antwortentität zurückgeben. Außerdem müssen Sie
eine Annotation vom Typ @Produces("application/json") zurückgeben oder den Content-Type-Header in Ihrem Response-Objekt auf
"application/json" setzen. Das folgende Beispiel veranschaulicht einfache JSON-Rückgabemethoden für die JAXB-Klasse
BookList:
@GET
@Produces("application/json")
public BookList getBookList() {
BookList list = /* get a book list */
return list;
}
oder@GET
@Produces("application/json")
public javax.ws.rs.core.Response getBookList() {
BookList list = /* get a book list */
return Response.ok(list).type(MediaType.APPLICATION_JSON_TYPE).build();
}
- Wenn Sie sowohl XML- als auch JSON-Objekte zurückgeben möchten, können Sie dieselbe Methode mit minimalen Änderungen wiederverwenden. Sie müssen "application/xml", "application/json"
und "text/xml" in der Annotation @Produces angeben.
Das folgende Beispiel veranschaulicht eine einfache JSON-Rückgabemethode, die ein Objekt vom Typ BookList
für die JAXB-Klasse BookList zurückgibt:
@GET
@Produces("application/json", "application/xml", "text/xml")
public BookList getBookList() {
BookList list = /* get a book list */
return list;
}
Das folgende Beispiel veranschaulicht eine einfache JSON-Rückgabemethode, die ein Objekt vom Typ
javax.ws.rs.core.Response für die JAXB-Klasse BookList zurückgibt:
@GET
@Produces("application/json", "application/xml", "text/xml")
public javax.ws.rs.core.Response getBookList() {
BookList list = /* get a book list */
return Response.ok(list).build();
}
Die Vereinbarung von Inhalten über den Accept-HTTP-Header der Clientanforderung hilft, zu bestimmen,
ob von der Ressourcenmethode eine JSON- oder eine XML-Darstellung zurückgegeben wird. Weitere
Informationen finden Sie im Artikel zur Vereinbarung von Inhalten. Durch die Wiederverwendung von annotierten JAXB-Objekten können Sie die Entwicklungszeit
für die Bereitstellung von JSON und XML aus demselben Code verkürzen.
Die Wiederverwendung eines Modells kann von Nutzen sein, wenn keine bestimmte formatierte JSON- oder XML-Ausgabe erforderlich ist.
Wenn Sie eine bestimmte XML- und JSON-Ausgabe benötigen und nicht dieselben annotierten JAXB-Klassen wiederverwenden können,
können Sie das Problem beispielsweise dadurch lösen, dass Sie zwei verschiedene Ressourcenmethoden verwenden.
Die JSON-Ressourcenmethode muss mit einer Annotation vom Typ @Produces("application/json") und die XML-Ressourcenmethode
mit einer Annotation vom Typ @Produces("application/xml", "text/xml") versehen werden.
Ergebnisse
Sie haben eine JSON-Darstellung mit annotierten JAXB-Klassen über den Jackson-JSON-Prozessor zurückgegeben.