2016-06-30 4 views
0

Ich bin mit Jersey auf der Server-Seite und meine Funktion verwendetBeitrag Ajax-Aufruf mit json 400 während Rest Client zurückgegeben funktioniert

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
public Response someFunction(SomeClass obj,@Context HttpServletRequest req){} 

Aber wenn ich einen HTTP-POST-Aufruf mit Content-type = "application/Json "und Payload als {"name":"abc","age":"20"} von Advanced Rest Client, dann wird der Anruf ein erfolgreicher Anruf sein. Aber wenn ich einen Client erstellen, die einen Ajax-Aufruf macht wie,

var person = { 
      name: "abc", 
      age:"20", 
     } 
$.ajax({ 
    url: 'someUrl', 
    type: 'post', 
    contentType: "application/json; charset=utf-8", 
    dataType: 'json', 
    success: function (data) { 
    }, 
    data: person 
    }); 

Dann wird dieser Anruf 400 Ungültige Anforderung zurückkehren und es wird nicht innerhalb der Funktion auf Server-Seite gehen. Wenn wir Personen-Objekt in Form einer Zeichenfolge übergeben, wie,

"{\"name\":\"abc\",\"\age":\"20\"}" 

dann auch Ajax-Aufruf zurückkehren 200. Gibt es Gründe, warum es geschieht?

+1

Sie haben JSON nicht an den Server gesendet. 'person' ist ein Objekt, und jquery wird das natürlich in eine param-Zeichenkette umwandeln, nicht in json, weil es das standardmäßig tut. –

+0

ich passiere Javascript Objekt direkt – sunder

+1

ja, und das ist das Problem, wie ich es erklärt habe. Ein JavaScript-Objekt ist ** nicht ** json. –

Antwort

0

Sie sollten Daten stringieren.

$.ajax({ 
    url: 'someUrl', 
    type: 'post', 
    contentType: "application/json; charset=utf-8", 
    dataType: 'json', 
    success: function (data) { 
    }, 
    data: JSON.stringify(person) 
}); 
+0

Kann mir jemand sagen, was ist los mit dieser Antwort? –

+0

Nichts, es ist einfach nicht nützlich. Es enthält keine Informationen, die nicht bereits in der Duplikatsfrage enthalten sind. –