Ich sende ein JSON-Objekt an meinen Web-Service, die auch interne JSON-Objekt hat. Ich kann es nicht in meinem Webservice abrufen. Mein Client-Seite Code ist wie folgtHolen Sie Json-Objekt im Web-Service mit Jersey
var courseDetails = '{"UserId": "abc","CourseId": "C1","CourseDetails":{"Id": "_26_1","Name": "Group task test (revised)","Description": "Sample Description"}}';
var obj = JSON.parse(courseDetails);
$http({
method: 'POST',
url: 'rest/DB/Save',
headers: {'Content-Type': 'application/json'},
data : courseDetails,
}).success(function (data){
$scope.status=data;
}).error(function(data, status, headers, config) {
alert("error");
});
und in meinem Web-Service,
@POST
@Path("/Save")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN})
public String autoSave(JSONObject obj) throws Exception{
PersonalisationDao p = new PersonalisationImpl();
System.out.println("Obj "+obj);
String result = "failure";
if(obj != null) {
String userId = (String) obj.get("UserId");
String courseId = (String) obj.get("CourseId");
String courseDetails = (String) obj.get("CourseDetails");
// Problem in fetching course Details
result = p.addDetails(userId, courseId, courseDetails);
}
return result;
}
Normalerweise es ein JSON-Objekt sein sollte, aber, sein werfen
SEVERE: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.String
Ich habe versucht, durch Casting mit JSONObject auch, aber es hat immer noch nicht funktioniert. Irgendwelche Vorschläge?
Welches Objekt haben Sie auf der Serverseite erhalten, wenn Sie es mit System.out.println ("Obj" + obj) anzeigen? –
@BandiKishore Ich erhalte das gleiche Objekt, aber sein Casting auf Linkedhashmap – Syed
Jetzt sehe ich das Problem. Wenn JSONObject geschachtelte Objekte verwendet, verwendet es immer eine LinkedHashMap, um diese verschachtelten Objekte zu speichern, da es die Hierarchie nicht kennt, in der diese Objekte verschachtelt sein könnten. Also in Ihrer Anfrage werden die ** Felder ** immer gleich sein? In diesem Fall können Sie ein diesen Feldern entsprechendes POJO erstellen und dieses Objekt übernehmen. Wenn nicht, dann können Sie einen Transformator schreiben, um dies zu erreichen. Lassen Sie mich wissen, welchen Ansatz Sie wählen würden, ich kann dafür eine Beispielreferenz liefern. –