Wie die POST ein Formular mit dem Jersey-2.0
Ich versuche einige Daten aus einem Formular mit jersey und ich dachte, es wäre eine einfache Aufgabe zu erfüllen, aber ich erhalte eine Fehlermeldung, wenn ich versuche, etwas zu VERÖFFENTLICHEN.
Caused by: java.lang.IllegalStateException: The @FormParam is utilized when the content type of the request entity is not application/x-www-form-urlencoded
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.ensureValidRequest(FormParamValueFactoryProvider.java:126)
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.getForm(FormParamValueFactoryProvider.java:111)
at org.glassfish.jersey.server.internal.inject.FormParamValueFactoryProvider$FormParamValueFactory.get(FormParamValueFactoryProvider.java:94)
at org.glassfish.jersey.server.internal.inject.AbstractHttpContextValueFactory.provide(AbstractHttpContextValueFactory.java:65)
at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:80)
... 36 more
Ich denke, dies ist der relevante Teil der stack-trace.
Nun zum code, den ich verwende:
@POST
@Path("/delete")
@Produces("application/json")
public String delete(@FormParam("id")String id){
Ich versuche POST mit einer test-html-Seite wie diese:
<form action="<path to the server>/delete" method="post">
primary_id: <input type="text" name="primary_id" /><br />
<input type="submit" value="Submit" />
</form>
Ich habe versucht, damit es funktioniert, aber keine chance. Ich habe versucht, indem die @Verbraucht() annotation mit multipart-form-data kann aber nicht wirklich damit es funktioniert. Ich hoffe, jemand kann mir eine hand.
versuchen Verbraucht(application/x-www-form-urlencoded)
ich habe versucht, hatte aber das gleiche Ergebnis.
ich habe versucht, hatte aber das gleiche Ergebnis.
InformationsquelleAutor XFCC | 2012-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke Euch allen für die Hilfe. Mit einigen code-review fand ich das problem. Obwohl ich glaube nicht, dass jemand diese spezielle Fehler, die ich poste es trotzdem für die Zukunft auf.
Das problem war, dass ich mich nicht mit einem standard-web-server. Ich habe implementiert eine netty server mit Jersey und das problem war, dass sagte die Umsetzung. Das problem war, dass ich nicht die Weitergabe der Header in der HTTP-Anfrage nach Jersey, als ich sollte. Ich war zu verlieren den Content-Type in der Mitte der operation, bedeutet dies, dass Jersey nicht identifizieren konnte die Nachricht geben.
So, für die Zukunft, für jemand mit einem ähnlichen problem beim implementieren Sie eine nicht-standard-server mit jersey: wenn Sie nicht pass-der Medientyp korrekt ist (es gibt eine Methode namens getMediaType() in der ContentRequest-Klasse, die verwendet wird, unter anderem, zur Validierung der Content-Type bei @FormParam verwendet wird), erhalten Sie diese Art von Ausnahme.
Wieder, danke Euch allen für die Hilfe 🙂
Können Sie ein Beispiel, wie du es getan hast?
gut, es war vor 5 Jahren und ich weiß nicht ganz vergessen, die Besonderheiten. Ihre Frage zum binden jersey netty oder einfach nur, wie ich an den Header?
Ich umgesetzt, an der Zeit, einen handler für netty, wäre die Kenntnis der ApplicationHandler aus jersey. Wenn eine Nachricht empfangen wurde, Las ich die Anfrage, erstellt ein ContainerRequest (denn dies ist das Objekt, das Jersey wird erwartet) und dann mit der Anwendungsebene, über ApplicationHandler hatte, dass ich wissen über. Ich hatte dann eine netty ContainerResponseWriter, behandelt die Antwort an den client. Zu den Headern, sollten Sie schauen, InboundMessageContext aus jersey, die erweitert wird durch ContainerRequest und wird wahrscheinlich sagen Ihnen, was Sie brauchen. Alles, was ich helfen kann einfach Fragen.
InformationsquelleAutor XFCC
Dein code ist in Ordnung, außer Sie ändern müssen
Da Sie nicht definieren @Verbraucht(), standardmäßig delete-Methode verbraucht
mediaType="application/x-www-form-urlencoded" .
Ich habe deinen code getestet und es funktioniert perfekt hier. Mein Vorschlag ist, überprüfen Sie Ihre jersey-jar-Dateien Speziell jsersey-server.jar Datei in deinem lib-Ordner.
InformationsquelleAutor Prabash B
Sind Sie benennen Ihre Eingabe "primary_id", Sie aber die Fehlermeldung "id" - Namen in Ihrem @FormParm annotation. Ändern Sie die id und den Namen im input-tag auf "id".
Auch, wenn Sie verbrauchen application/x-www-form-urlencoded fügen Sie dieses Attribut, um Ihre form-tag: enctype="application/x-www-form-urlencoded"
Komisch.. Stellen Sie sicher, dass alle Bibliotheken die gleiche version (z.B. 1.13).
tatsächlich, wie ich schon in dem Titel ich bin mit jersey 2.0. Jedenfalls habe ich das problem gefunden ich poste es für die Zukunft auch wenn ich nicht wirklich denke, jeder wird das gleiche problem haben 🙂
InformationsquelleAutor john 4d5