Я пытаюсь выполнить ajax-вызов моего контроллера / действия Spring с помощью метода POST и вернуть объект с сервера с помощью @ResponseBody. Странная ситуация заключается в том, что он перестает работать после добавления уровня безопасности Spring, раньше все работало нормально. Я постараюсь объяснить свои шаги по решению проблемы, а затем покажу вам код / снимки / и т. Д.
1. После некоторого исследования я нашел ответы о том, что проблема может быть связана с механизмом csrf, поэтому я отключил его, но проблема не исчезла. (ниже spring-security.xml)
2. Я сделал снимок wirehark, чтобы проверить запрос / ответ. Мой запрос ajax в порядке, мое объявление контроллера в порядке, но я не понимаю, почему, в ответе 405 указано> Разрешить: GET (снимок ниже)
3. Я попытался получить доступ к своему действию контроллера через браузер (т. Е. Сделать запрос GET) и получил сообщение об ошибке HTTP-статус 405 - метод запроса «GET» не поддерживается!
4. Я попытался изменить RequestMapping (метод ...) на RequestMethod.GET, и запрос доходит до контроллера и работает нормально, но я не хочу, чтобы он работал с методом GET, мне нужен запрос POST.
5. Изменено RequestMapping (потребляет, производит, заголовки), чтобы принимать все виды данных, но все еще 405 ...
Это сводит меня с ума! Я размещаю свои файлы ниже, так что вы можете проверить это, ребята, любой совет будет оценен. Спасибо! (ВАЖНОЕ ПРИМЕЧАНИЕ: это моя конфигурация отчаяния)
spring -security.xml
<beans:beans
xmlns...(all needed declarations)>
<http pattern="/js/**" security="none" />
<http pattern="/css/**" security="none" />
<!-- enable use-expressions -->
<http auto-config="true" >
<access-denied-handler error-page="/403" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/login" access="isAnonymous()" />
<intercept-url pattern="/403" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login"
username-parameter="email"
password-parameter="password"
authentication-failure-url="/login?failed" />
<!--
<csrf/>
-->
</http>
..... (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;
}
}
ИЗМЕНИТЬ код вызова jquery ajax
$.ajax({
type: 'POST',
cache: false,
url: /admin/events/loadEvents,
data: { parentId: 1 },
dataType = 'json',
contentType = 'application/json',
...
});