2016-07-12 30 views
0

我正在給JAVA API的調用如下:如何檢索JSON從AJAX調用傳遞到Java API

var userDetails = { 
      userId: userId, 
      first : "1 one", 
      second : "2 two" 
     } 
    $.ajax({ 
     type : 'POST', 
     url : "http://" + config.domain + config.root + "/myExp/allExperiment", 
     dataType : "json", 
     data : userDetails, 
     success : function(data) {}) 
    }); 

並試圖獲得傳遞的對象如下:

@RequestMapping(value = "/allExperiment", method = RequestMethod.POST) 
    public JsonMapModel getAllDatasets(@RequestBody String userDetails) { 
     System.out.println("Data is " + userDetails); 
} 

我在API 數據正在逐漸以下是秒= 2 + 2 &用戶id = 16 &第一= 1 +一個

任何想法如何將上述響應轉換爲JSONObject或任何其他集合,以便我可以適當地引用傳遞的JSON。

+0

您在Java端使用什麼庫來處理請求? – smac89

+0

目前沒有使用過的庫,它只是一個基於Spring的API,喜歡知道我應該怎樣使用/做解析請求體 – Nitin

回答

0

感謝您的答覆,按照由@Alexandru碼頭的建議,以下爲我工作再次

0

它應該工作,如果你用一個真實的對象,例如UserDetails userDetails替換String userDetails)。

或嘗試使用MultiValueMap而不是String。從下面的鏈接看來,如果這是參數比Spring自動使用FormHttpMessageConverter。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody

+0

是的,它可以這樣做,但我想有一個機制,我可以維護一個服務器端對象,而不考慮JSON中的參數數量,例如,如果傳遞JSON有2個鍵值對,或者它可以是5個鍵值對,應該將其存儲在服務器上的通用集合對象中 – Nitin

+1

嘗試使用MultiValueMap 而不是String。從下面的鏈接看來,如果這是參數比Spring自動使用FormHttpMessageConverter。 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestbody –

+0

是的,它使用MultiValueMap Nitin

0

您可以使用Jersey API將JSON轉換爲服務器端的值對象。 Jersey Jar自動將JSON轉換爲VO和VO至JSON。 下面是快照如何可以在服務器端收到VO:一旦

@RequestMapping(value = "/allExperiment", method = RequestMethod.POST) 
    public JsonMapModel getAllDatasets(@RequestBody MultiValueMap<String, String> userDetails) { 
System.out.println("User id is " userDetails.getFirst("userId")); } 

感謝:

@POST 
@Path("/allExperiment") 
@Consumes({ MediaType.APPLICATION_JSON }) 
@Produces({ MediaType.APPLICATION_JSON }) 
public JsonMapModel getAllDatasets(UserDetails userDetails) { 
    System.out.println("Data is " + userDetails); 
} 
1

您使用傑克遜庫。傑克遜轉換Java對象到/從JSON

(pom.xml中)

<!-- Jackson --> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-core</artifactId> 
    <version>2.4.3</version> 
</dependency> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.4.3</version> 
</dependency> 

(JS)

var userDetails = { 
      userId: userId, 
      first : "1 one", 
      second : "2 two" 
     } 

    userDetails = JSON.stringify(userDetails);  

    $.ajax({ 
     type : 'POST', 
     url : "http://" + config.domain + config.root + "/myExp/allExperiment", 
     contentType : 'application/json', 
     data : userDetails, 

     success : function(data) { 

    }, 
    error : function(request, status, error) { 

    } 
}); 

(型號)

public class TestModel { 

    private String userId; 
    private String first; 
    private String second; 

    //getter, setter 
} 

(控制器)

@RequestMapping(value = "/allExperiment", method = RequestMethod.POST) 
public @ResponseBody String getAllDatasets(@RequestBody TestModel userDetails) { 


    return null; // break point, check model. 
} 
+1

而不是包括多個傑克遜圖書館,我認爲'谷歌gson'就足夠工作。另外我認爲它應該是'數據:JSON.stringify(userDetails)'在Ajax調用。 –

+0

哦。好的。我認爲你的評論很好。好。編輯。謝謝! – Byeon0gam