Spring Boot + ajax:Method not allowed
При попытке отправить POST запрос возникает ошибка 405. Использую Spring Security поэтому в мете использую csrf.
html:
<meta name="_csrf" th:content="${_csrf.token}"/>
<meta name="_csrf_header" th:content="${_csrf.headerName}"/>
jQuery:
let formData = {'flag': false}
setLike("/ideas/setLike-" + id, formData, id)
function setLike(url, formData, id){
$.ajax ({
url: url,
method: "POST",
data: formData,
dataType: 'html',
success: function (fragment) {
$("#idea-" + id).html($('#idea-' + id, fragment).html())
}
});
}
$(document).ajaxSend(function(e, xhr, options) {
let token = $("meta[name='_csrf']").attr("content");
let header = $("meta[name='_csrf_header']").attr("content");
xhr.setRequestHeader(header, token);
});
Controller
@PostMapping("/setLike-{idea}")
public String setLike(@PathVariable Idea idea, Model model, Principal principal,
@RequestParam boolean flag){
User user = userRepository.findByUsername(principal.getName());
if (flag) ideaService.addLike(user, idea);
else ideaService.remLike(user, idea);
ideaRepository.save(idea);
ideaRepository.flush();
return "redirect:";
}
Главное - такое только на проде, на локальном хосте всё окей...
Ответы (1 шт):
Автор решения: Митяй
→ Ссылка
Причина ошибки заключалась в следующем: После отправки POST запроса с помощью ajax нужный метод исполнялся, но возвращал редирект на метод GET.
Исправил, изменив возвращаемое значение:
@PostMapping("/setLike-{idea}")
public String setLike(@PathVariable Idea idea, Model model, Principal
principal,@RequestParam boolean flag){
User user = userRepository.findByUsername(principal.getName());
if (flag) ideaService.addLike(user, idea);
else ideaService.remLike(user, idea);
ideaRepository.save(idea);
ideaRepository.flush();
return "ideas"; // Изменил данную строчку, теперь нет редиректа
}