Es scheint, dass Sie hier eine MessageBodyReader
verwenden müssten. Hier ist ein Beispiel, mit jdom:
import org.jdom.Document;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.MediaType;
import javax.ws.rs.ext.MultivaluedMap;
import java.lang.reflect.Type;
import java.lang.annotation.Annotation;
import java.io.InputStream;
@Provider // this annotation is necessary!
@ConsumeMime("application/xml") // this is a hint to the system to only consume xml mime types
public class XMLMessageBodyReader implements MessageBodyReader<Document> {
private SAXBuilder builder = new SAXBuilder();
public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
// check if we're requesting a jdom Document
return Document.class.isAssignableFrom(type);
}
public Document readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) {
try {
return builder.build(entityStream);
}
catch (Exception e) {
// handle error somehow
}
}
}
Fügen Sie diese Klasse in die Liste der Ressourcen, um Ihre Jersey Deployment-Prozess (in der Regel über web.xml konfiguriert, glaube ich). Anschließend können Sie diese Leser in einem Ihrer regelmäßigen Ressourcenklassen wie folgt verwenden:
@Path("/somepath") @POST
public void handleXMLData(Document doc) {
// do something with the document
}
Ich habe nicht nachgewiesen, dass das funktioniert genau wie eingegeben, aber das ist der Kern von ihm. Mehr lesen hier:
Hinzufügen eines @Consumes (MediaType.TEXT_PLAIN) war auch für mich erforderlich. –
Oder würde ich @consumses alles im Allgemeinen erraten? –
Dies ist extrem hilfreich für das Debugging von Nachrichten in Jersey, wo aus irgendeinem Grund Netzwerkinspektion keine Option ist, aber Codeänderungen sind (lokale Integrationstests, in meinem Fall). – Patrick