我正在尝试用POST方法对我的
Spring控制器/动作进行ajax调用,并使用@ResponseBody从服务器返回一个对象.奇怪的情况是它在添加spring安全层后停止工作,之前一切正常.我将尝试解释我解决问题的步骤,然后向您展示代码/捕获/等.
1.
经过一些研究后,我发现了一些答案,说明问题可能与csrf机制有关,所以我禁用它并仍然存在问题. (spring-security.xml bellow)
2.
我做了一个wireshark捕获来检查请求/响应.我的ajax请求没问题,我的控制器声明没问题,但我不明白为什么,405响应表明>允许:GET(捕获波纹管)
3.
我试图通过浏览器访问我的控制器操作(即发出GET请求),我收到错误HTTP状态405 – 不支持请求方法’GET’!
4.
我试图将RequestMapping(方法…)更改为RequestMethod.GET,并且请求到达控制器并且工作正常,但我不希望它在GET方法上工作,我想要一个POST请求.
5.
更改了RequestMapping(使用,生成,标题)以接受所有类型的数据,但仍然是405 …
这真让我抓狂!我发布我的文件,所以你可以检查它们,任何提示将不胜感激.谢谢! (重要说明:这是我的绝望配置)
弹簧security.xml文件
xmlns...(all needed declarations)>
username-parameter="email"
password-parameter="password"
authentication-failure-url="/login?failed" />
..... (authentication)
AdminController.java
@Controller
@RequestMapping("/admin**")
public class AdminController {
... (all my autowired beans)
@RequestMapping(
value = "/events/loadEvents",
method = RequestMethod.POST,
consumes = MediaType.ALL_VALUE,
produces = MediaType.ALL_VALUE,
headers = "Accept=*/*")
@ResponseBody
public Event loadEvents(@RequestParam("parentId") long parentId) {
... (my logic)
return event;
}
}
请求(wireshark捕获)
响应(wireshark捕获)
编辑
jquery ajax调用代码
$.ajax({
type: 'POST',
cache: false,
url: /admin/events/loadEvents,
data: { parentId: 1 },
dataType = 'json',
contentType = 'application/json',
...
});