2016-03-24 8 views
0

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?

+0

Welches Objekt haben Sie auf der Serverseite erhalten, wenn Sie es mit System.out.println ("Obj" + obj) anzeigen? –

+0

@BandiKishore Ich erhalte das gleiche Objekt, aber sein Casting auf Linkedhashmap – Syed

+0

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. –

Antwort

0

Erledigt, indem man zuerst zu LinkedHashMap umwandelt und dann schließlich in String konvertiert.

+0

Ja, das war der Ansatz, den ich vorschlug. –