2012-07-17 85 views
2

我想通過submited表單到我的頁面控制器。我構建JSON對象是這樣的:彈簧mvc傳遞對象post方法

{ 
"periodId": "1", 
"domainId": "46", 
"modelTypeId": "1", 
"modelGroup": { 
    "modelGroupName": "123", 
    "modelGroupDescription": "abc" 
} 
} 

在哪裏,我想對象*Id作爲整數傳遞和modelGroup爲完整的對象。所以,我的目標就是以某種方式使這項工作:

JS文件

jQuery.ajax("/Models/SaveModel", { 
    type:"POST", 
    dataType:'json', 
    contentType:"application/json", 
    data:JSON.stringify(output) 
}); 

頁面控制器

@RequestMapping(value = "/SaveModel", method = RequestMethod.POST, headers = {"content-type=application/json"}) 
public 
@ResponseBody 
boolean createModel(SettlementModelGroup modelGroup, 
        Integer periodId, 
        Integer domainId, 
        Integer modelTypeId) 
{ 
    //process data here 
} 

是否有可能還是我必須做出@RequestBody String object註釋,然後解析JSON文件?

+0

春天會爲你轉換,我爲你得到正確的JSON和相應的請求參數 – NimChimpsky 2012-07-17 14:36:49

+0

你能用我提供的數據的例子寫一個答案嗎? – kamil 2012-07-17 14:38:02

回答

1

Spring MVC的默認情況下,你將無法做到這一點 - 如果你想使用默認的方法,你可以像你所說的創建一個包裝類型與modelGroupperiodIddomainIdmodelTypeId@RequestBody註釋包裝類型。

如果你絕對要沿着你寫什麼的寫法,這種做法將是:

創建自定義的註釋 - 說@JsonArg

標註使用此標註相關參數

boolean createModel(@JsonArg SettlementModelGroup modelGroup, 
        @JsonArg Integer periodId, 
        @JsonArg Integer domainId, 
        @JsonArg Integer modelTypeId); 

編寫自定義HandlerMethodArgumentResolver將支持@JsonArg標註的參數:

boolean supportsParameter(MethodParameter parameter){ 
    return (parameter.getParameterAnnotation(JsonArg.class)!=null); 
} 

寫邏輯請求主體解析出相關參數:

public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { 
+0

感謝您的完整答案!我想更簡單的方法將傳遞整數作爲路徑變量? – kamil 2012-07-17 15:20:51

0

如果您創建了一個對象,該對象包含上面列出的參數中的所有4個對象,那麼您可以僅使用@RequestBody註釋該參數,它會將其全部轉換爲您。

0

@RequestBody後,必須寫一個對象,其中包含模型類(getter/setter方法)