2016-12-27 3 views
3

Ich versuche, eine POST-Methode für einen Java-Webdienst mit Jersey RS zu erstellen, die JSON verbraucht, jedoch erhalte ich einen 400 schlechten Anforderungsfehler, wenn ich einige Beispiel-JSON einreiche.400 Schlechte Anfrage für einen POST-Dienst

@Path("/Register") 
@Stateless 
public class RegistrationController { 

    @POST 
    @Path("/Test") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public String postHelloWorld(String message){ 
     return "temp"; 
    } 

Oben ist der Code für die Post-Methode, und wenn ich versuche, einen API-Dienst wie Postman zu verwenden, um eine Post-Anforderung zu

http://localhost:37846/Register/Test

Mit Postman setzt einen Header von einreichen Content-Type als application \ json, mit einigen Beispiel-JSON wie

{"menu": { 
    "id": "file", 
    "value": "File", 
    "popup": { 
    "menuitem": [ 
     {"value": "New", "onclick": "CreateNewDoc()"}, 
     {"value": "Open", "onclick": "OpenDoc()"}, 
     {"value": "Close", "onclick": "CloseDoc()"} 
    ] 
    } 
}} 

Ich erhalte die 400 schlechte Anfrage Fehler.


Antwortkörper:

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
    <title>GlassFish Server Open Source Edition 4.1.1 - Error report</title> 
    <style type="text/css"> 
     <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}HR {color : #525D76;}--> 
</style> 
</head> 

<body> 
    <h1>HTTP Status 400 - Bad Request</h1> 
    <hr/> 
    <p><b>type</b> Status report</p> 
    <p><b>message</b>Bad Request</p> 
    <p><b>description</b>The request sent by the client was syntactically incorrect.</p> 
    <hr/> 
    <h3>GlassFish Server Open Source Edition 4.1.1 </h3> 
</body> 

</html> 

Der Versuch, die Nachricht mit System.out konnte nicht gedruckt, wie eine generische System.out.print tat ("Hallo") Nachricht, die mich führt zu glauben, dass die Methode nicht aufgerufen wird.
Da ich keinen 404-Fehler erhalte, und wenn ich die Datentypen zwicke, erhalte ich einen 415 Nicht unterstützten Medientyp-Fehler, dies schließt etwas wie eine falsche Zuordnung aus.
JSON ist nicht fehlerhaft, daher liegt das Problem wahrscheinlich entweder bei der eingereichten Anforderung oder daran, wie der Webdienst die Anforderung verarbeitet.

+1

Debug das Programm! Drucken Sie die eingehende "Nachricht" aus. Funktioniert die Anfrage für Methoden ohne JSON zu verbrauchen? – ppasler

+2

400 Ungültige Anforderung bedeutet, dass der/test-Endpunkt andere Parameter erwartet als Sie senden. Verwenden Sie einen JSON-Objekt-Mapper wie Jackson? Wenn dies der Fall ist, müssen Sie ein Objekt erstellen, das dieselben Werte enthält wie das Menü in Ihrem JSON (ID, Wert, Popup). –

+1

400 bedeutet, dass Sie die meiste Zeit schlechte Daten senden. Sind Sie sicher, dass es keinen Antworttext mit einer Fehlerbeschreibung gibt? Ein guter Service sollte es haben. – cen

Antwort

1

Problem war ein Tippfehler in der Kopfzeile.

War, was den Fehler 400 verursacht hat.
Der Header, der das Problem behebt, ist

Content-Type application/json