我正在嘗試開發一個簡單的組件,其工作是使用模板呈現數據的特定部分。Spring MVC - 使用POST和發送數據使用Ajax返回視圖
我使用的是彈簧數據REST的MVC所以我有一個適合我的需求(基於AJAX的web應用程序)的數據的準備和工作開箱即用的來源。
所以,我有什麼問題。 問題就出在這裏:
{
"panels":[
{
"id":"panel-BASIC",
"el":"panel-BASIC",
"attributes":[
{
"position":"0",
"key":"id",
"display":"value",
"dataUtility":"",
"value":"2"
},
{
"position":"1",
"key":"begin",
"display":"value",
"dataUtility":"",
"value":1384518600000
},
{
"position":"2",
"key":"end",
"display":"value",
"dataUtility":"",
"value":1384518600000
},
{
"position":"3",
"key":"interval",
"display":"value",
"dataUtility":"intervalCalculationDataUtility"
}
]
},
{
"id":"panel-ONE_TO_MANY",
"el":"panel-ONE_TO_MANY",
"attributes":[
{
"position":"0",
"key":"tasks",
"display":"table",
"dataUtility":"",
"value":"http://localhost:8080/rest/appointment/2/tasks"
}
]
},
{
"id":"panel-MANY_TO_ONE",
"el":"panel-MANY_TO_ONE",
"attributes":[
{
"position":"0",
"key":"car",
"display":"infopage",
"dataUtility":"",
"value":"http://localhost:8080/rest/appointment/2/car"
},
{
"position":"1",
"key":"assignee",
"display":"infopage",
"dataUtility":"",
"value":"http://localhost:8080/rest/appointment/2/assignee"
},
{
"position":"2",
"key":"reporter",
"display":"infopage",
"dataUtility":"",
"value":"http://localhost:8080/rest/appointment/2/reporter"
}
]
}
],
"container":"ip-SAppointment"
}
這是正在被髮送到服務器,以前建成使用檢索到的數據和屬性描述符的客戶端描述符。
使用我已經發布了一個JSON我需要發送POST請求與它不是返回渲染視圖。 控制器方法的工作是相當簡單:
@RequestMapping(
value = "/template/render",
method = RequestMethod.POST,
produces = MediaType.TEXT_PLAIN_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE
)
public ModelAndView getInfoPageViewData(
@RequestBody final InfoPageDescriptor body
) {
LOGGER.trace(String.format("/getInfoPageViewData -> %s", body));
final ModelMap modelMap = new ModelMap();
modelMap.put("dd", body);
return new ModelAndView(DATA_VIEW_NAME, modelMap);
}
所以你可以看到它的包裝JSON發送到InfoPageDescriptor Bean上放置比爲ModelMap。
返回的視圖將處理來自模型映射的豆,並相應地起作用以條目。
無論如何,我可以得到這個方法的工作。通過這樣的jQuery的(AJAX-POST)電話:
function loadRenderedView(url, data, callback) {
return $.ajax({
headers : {
'Accept' : 'text/plain',
'Content-Type': 'application/json'
},
url : url,
data : JSON.stringify(data),
dataType: 'json',
type : 'post',
success : function (data) {
callback.apply(this, [data, true]);
},
failure : function() {
callback.apply(this, [data, false]);
}
});
}
我得到一個錯誤:客戶端發送的請求是語法不正確。。
你能給我應該如何構建一個請求或控制器服務器的方法來使它工作的一些提示?
添加「log4j.logger.org.springframework = INFO,yourlogger」你log4j.properties和檢查的痕跡,看來你是發送一個JSON不與InfoPageDescriptor類相匹配。 – vzamanillo
好的,我會看看。 – kornicameister
你救了我一天,這個小小的提示讓我發現了一個錯誤。事實上,我的JSON結構與Java結構不匹配。一個小的嵌套屬性具有不同的名稱。 Thx的幫助;) – kornicameister