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進行投射,但仍然無效。有什麼建議麼?
當您使用System.out.println(「Obj」+ obj)顯示它時,您在服務器端收到的對象是什麼? –
@BandiKishore我收到相同的對象,但它的鑄造到Linkedhashmap – Syed
現在我看到了問題。當使用JSONObject時,如果存在嵌套對象,那麼它將始終使用LinkedHashMap來存儲這些嵌套對象,因爲它不知道這些對象如何嵌套的層次結構。 因此,在您的請求中,**字段**總是相同嗎?在這種情況下,您可以創建與這些字段相對應的POJO並接受該對象。如果沒有,那麼你可以寫一個變壓器來實現這一點。讓我知道你想採取哪種方法,我可以提供一個樣本參考。 –