2016-03-24 12 views
0

JSONオブジェクトもJSONオブジェクトを含むWebサービスに送信しています。 Webサービスで取得できません。Jerseyを使用してWebサービスでjsonオブジェクトを取得します。

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"); 
     }); 

を次のように私のクライアント側のコードがあると私のウェブサービスでは、

@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; 
} 

通常、それはJSONオブジェクトである必要がありますが、その私がで試した

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 

を投げますJSONObjectでキャスティングしても、それでも動作しませんでした。助言がありますか?

+0

System.out.println( "Obj" + obj)を使用して表示すると、サーバー側で受け取ったオブジェクトは何ですか? –

+0

@BandiKishore私は同じオブジェクトを受け取りますが、LinkedHashmapにキャストします – Syed

+0

今問題が表示されます。 JSONObjectを使用する場合、ネストされたオブジェクトがある場合、これらのオブジェクトがネストされる方法に関する階層を知らないため、常にネストされたオブジェクトを格納するためにLinkedHashMapを使用します。 あなたのご要望では、**フィールド**は常に同じですか?この場合、これらのフィールドに対応するPOJOを作成し、そのオブジェクトを受け入れることができます。そうでなければ、これを達成するためにトランスを書くことができます。どちらのアプローチを取っておきたいか教えてください。私はそのための参考資料を提供することができます。 –

答えて

0

LinkedHashMapに最初にキャストしてから、最後に文字列に変換して終了しました。

LinkedHashMap courseDetails = (LinkedHashMap) obj.get("CourseDetails"); 
String jsonCourseString = new Gson().toJson(courseDetails, Map.class); 
+0

はい、私が提案していたアプローチでした。 –

関連する問題