@Consumes(MediaType.APPLICATION_FORM_URLENCODED) FormParameter ist null
Habe ich einen Jersey-webservice, der wie folgt aussieht:
@Path("/webhookservice")
public class Webhook {
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response readData(@FormParam("payload") Payload payload, @Context HttpServletRequest req) {
//Gets client IP address
String ipAddress = (req.getRemoteHost().equals("") || req.getRemoteHost() == null) ? "UNKNOWN" : req.getRemoteHost();
//Persist data to DB
Persist.saveToDb(payload.getId(), Integer.toString(payload.getTimestamp()),
payload.getStatus(), payload.getAuth_code(),
payload.getTotal_amount(), payload.getRequired_amount(),
ipAddress);
//Repsond with a HTTP 200 OK
Response response = Response.status(200).build();
return response;
}
@GET
@Produces("text/plain")
public String testService() {
return "Service is up and working!";
}
}
Die Payload-Klasse sieht wie folgt aus:
@XmlRootElement
public class Payload {
private String id;
private int timestamp;
private String status;
private String auth_code;
private int total_amount;
private int required_amount;
//Getters
@XmlElement(name = "id")
public String getId() {
return this.id;
}
@XmlElement(name = "timestamp")
public int getTimestamp() {
return this.timestamp;
}
@XmlElement(name = "status")
public String getStatus() {
return this.status;
}
@XmlElement(name = "auth_code")
public String getAuth_code() {
return this.auth_code;
}
@XmlElement(name = "total_amount")
public int getTotal_amount() {
return this.total_amount;
}
@XmlElement(name = "required_amount")
public int getRequired_amount() {
return this.required_amount;
}
//Setters
public void setId(String id) {
this.id = id;
}
public void setTimestamp(int timestamp) {
this.timestamp = timestamp;
}
public void setStatus(String status) {
this.status = status;
}
public void setAuth_code(String auth_code) {
this.auth_code = auth_code;
}
public void setTotal_amount(int total_amount) {
this.total_amount = total_amount;
}
public void setRequired_amount(int required_amount) {
this.required_amount = required_amount;
}
}
Und die Anfrage, ich werde senden sieht wie folgt aus:
Content-Type: application/x-www-form-urlencoded
Methode: POST
Nicht Körper:
payload={"id":"123123","auth_code":"191331","required_amount":101,"timestamp":1407775713,"status":"completed","total_amount":101}
Codiert Körper:
payload%3D%7B%22id%22%3A%22123123%22%2C%22auth_code%22%3A%22191331%22%2C%22required_amount%22%3A101%2C%22timestamp%22%3A1407775713%2C%22status%22%3A%22completed%22%2C%22total_amount%22%3A101%7D
Aber wenn ich senden Sie die Anfrage aus der 'Nutzlast' - Objekt ist null in meiner "readData ()" - Funktion in der "Webhook" Klasse... Kann jemand mich in die richtige Richtung?
InformationsquelleAutor | 2014-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit einem
@Consumes(MediaType.APPLICATION_XML)
(auch einstellen das es beim senden der Anfrage) und entfernen Sie dann die@FormParam("payload")
annotation. Wenn Sie senden die payload in Ihrem client, stellen Sie sicher, es ist XML-codiert (ohnepayload=
).Sonst, wenn Sie wollen stick mit Ihrem schema (Misch-MediaType.APPLICATION_FORM_URLENCODED mit XML), müssen Sie manuell Dekodieren der kodierten XML-String.
Was ich meine ist Folgendes:
Warum müssen Sie arbeiten mit einem String statt einer Nutzlast parameter? Weil keiner sagt, Jersey/JAX-RS, wie zu entschlüsseln, die Zeichenfolge: es kann ein JSON-String oder ein XML-String.
Keine Probleme. Wenn Sie muss mit dem stick, ich fügte hinzu, mehr details in meiner Antwort. Aber ich halte die Jungs nicht wirklich wissen, was Sie tun: die Nutzlast ist wahrscheinlich die einzige Sache, die gesendet wird, mit einer solchen Anforderung, so ist es nicht nötig ist, um in einem FormParam.
haben Sie versucht, meine Lösung?
Ah ja! Vielen Dank 🙂 ich habe ein weiteres JSON-parsing-Bibliothek wenn. Aber ja es hat funktioniert, danke!
InformationsquelleAutor Andrei I
Ich es getan habe wie dieses, und es funktioniert:
InformationsquelleAutor