2016-03-24 70 views
0

我正在向我的web服務發送JSON對象,該服務也具有內部JSON對象。我無法在我的網絡服務中獲取它。我的客戶端代碼如下在使用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"); 
     }); 

和我的web服務,

@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

是的,這是我建議的方法。 –

相關問題