2016-03-24 29 views
0

İç JSON nesnesine sahip web servisime bir JSON nesnesi gönderiyorum. Web servisimde getiremiyorum. şöyle Müvekkilim tarafı kodudur bir JSON nesnesi olmalı ama, onunjson nesnesini web hizmetinde Jersey ile getirin

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 

Ben tarafından denedim atma

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

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

ve web hizmeti

, JSONObject ile de döküm ama yine de işe yaramadı. Baska öneri?

+0

System.out.println ("Obj" + obj) kullanarak görüntülediğinizde, sunucu tarafında aldığınız nesne nedir; –

+0

@BandiKishore Aynı nesneyi aldım, ancak Linkedhashmap – Syed

+0

için dökümünü şimdi görüyorum. JSONObject kullanırken, yuvalanmış nesneler varsa, her zaman bu nesnelerin yuvalanabilmesi için hiyerarşiyi bilmediği için yuvalanmış nesneleri depolamak için bir LinkedHashMap kullanacaktır. Yani isteğiniz, ** alanları ** her zaman aynı olacak mı? Bu durumda, bu alanlara karşılık gelen bir POJO oluşturabilir ve o nesneyi kabul edebilirsiniz. Değilse, bunu başarmak için bir transformatör yazabilirsiniz. Hangi yaklaşımı almak istediğinizi bana bildirin, bunun için örnek bir referans sağlayabilirim. –

cevap

0

Başlangıçta LinkedHashMap'a ve sonra dizeye dönüştürerek işiniz bitti.

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

Evet, önerdiğim yaklaşım buydu. –

İlgili konular