【发布时间】:2023-04-09 05:08:01
【问题描述】:
我正在尝试开发一个简单的组件,该组件的工作是使用模板呈现数据的特定部分。
我正在使用 Spring-Data-Rest-MVC,因此我有一个现成且可工作的 OOTB 数据源,适合我的要求(基于 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 中,该 bean 放置在 ModelMap 中。
返回的视图将处理模型映射中的 bean,并根据条目采取相应的行动。
无论如何我都可以让这个方法奏效。使用这样的 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 类不匹配。
-
好的,我去看看。
-
你拯救了我的一天,这个小技巧让我发现了一个错误。事实上,我的 JSON 结构与 Java 结构不匹配。一个小的嵌套属性有不同的名称。感谢您的帮助;)
标签: ajax spring-mvc model-view-controller view