我在服务器端有下一个控制器方法:
@RequestMapping(value = {"/templates/test"}, method =
RequestMethod.POST, consumes = "application/json")
@ResponseBody
public String TestURL(@RequestBody List<String> testString,
Model model,
Locale locale) {
return testString.toString();
}
UI上的前提条件(java脚本):
var statList = [];
statList.push('aaa');
statList.push('bbb');
var strList = JSON.stringify(statList);
以及从客户端调用它的两种方法:
1)通过jQuery:
$.ajax({
type: "POST",
contentType: 'application/json; charset=utf-8',
dataType: 'text',
url: "/templates/test",
data: strList,
success: function (result) {
alert(result.responseText);
},
});
- 运作良好。控制器处理请求。
2)通过纯AJAX:
var myReq = new XMLHttpRequest();
myReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
myReq.open("POST", "/templates/test", false);
myReq.responseType = 'text';
myReq.send(strList);
- 不起作用。控制器不处理请求。方法TestURL根本没有被调用。你能帮我解决第二个请求,以便能够在控制器上处理它吗?或建议正确的春季版本?我的春季版是4.3.7。
P.S。下一个代码运行良好,但它不是我想要的。我需要解析为List {String}:
控制器:
@RequestMapping(value = {"/templates/test"}, method = RequestMethod.POST) // , consumes = "application/json"
@ResponseBody
public String TestURL(@RequestBody String testString,
Model model,
Locale locale) {
return testString;
}
UI:
var myReq = new XMLHttpRequest();
//myReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
myReq.open("POST", "/templates/test", false);
myReq.send("aaaa");
答案 0 :(得分:0)
问题很简单:纯粹的ajax请求是错误的。在打开请求之前不允许调用setRequestHeader。除此之外,如果调用responseType,则async应为true