Wie behandeln die falschen von JSON-Inhalten geben, die von web-services mit der JAX-RS-standard-client-API?
Will ich mit den Rotten Tomatoes-API, um die Suche für die Filme.
Habe ich eine gleichwertige, voll funktionsfähige Anwendung, die verwendet TMDB eher als Faule Tomaten.
Ich die standard JAX-RS-Client, zur Verfügung gestellt von JBoss RESTEasy mit dem RESTEasy Jackson2-Anbieter (ich kann nicht nach meinen API-key natürlich):
public MovieSearchResults search(String query) {
return client
.target("http://api.rottentomatoes.com/api/public/v1.0/movies.json")
.queryParam("apikey", API_KEY)
.queryParam("q", query)
.request(MediaType.APPLICATION_JSON)
.get(MovieSearchResults.class);
}
Den MovieSearchResults-Klasse ist einfach ein JAXB annotierte Klasse binden die JSON.
Das unmittelbare problem ist, das die Rotten Tomatoes-API ist die Rückgabe einer Antwort mit einem content-type von "text/javascript" für alle seine JSON-Antworten. Sie haben gezeigt, dass eine Zurückhaltung zu ändern, Ihre Dienste, obwohl dies eindeutig den falschen content-type zu setzen, wenn die Rückgabe JSON, so jetzt es ist was es ist.
Die exception die ich bekomme, wenn ich den Dienst aufzurufen ist:
Exception in thread "main"
javax.ws.rs.client.ResponseProcessingException:
javax.ws.rs.ProcessingException:
Unable to find a MessageBodyReader of
content-type text/javascript;charset=ISO-8859-1 and type class MovieSearchResults
Die Frage ist also: gibt es eine einfache Möglichkeit zu erhalten/zu konfigurieren, die standard JAX-RS Client zu erkennen, die zurückgegeben "text/javascript" content-type als "application/json"?
Diese Fragen sind ähnlich, aber die akzeptierten Antworten angezeigt werden, verwenden Sie die JBoss-spezifischen API und ich würde es gerne spielen, nur über die JAX-RS Client API.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist die Verwendung eine JAX-RS ClientResponseFilter.
Antrag wird geändert, um die Registrierung der filter:
Den filter selbst ersetzt einfach den content-type-header: