我正在对我的spring控制器进行ajax调用,以便在db中创建一些数据,调用如下:
function myfunc(pId,cId,paIndex,cIndex,type)
{
$.ajax({
type : "POST",
url : "./home/useraction/save",
data : {
pId : pId,
cId : cId,
type : type
},
contentType : "application/json; charset=utf-8",
dataType : "json",
async : true,
success : function(data) {
alert(data);
}
});
}
我的控制器就像:
@Controller
@RequestMapping("/home")
public class HomeController
{
@RequestMapping(value="/useraction/save" ,method = RequestMethod.POST)
public @ResponseBody GenericResponse save(Model model,HttpServletRequest request) throws Exception
{
String actionType = request.getParameter("type");
try
{
if(actionType != null)
{
if (UserActionTypeEnum.UPVOTE.name().equalsIgnoreCase(type)) {
// do something
} else if (UserActionTypeEnum.DOWNVOTE.name().equalsIgnoreCase(actionType)) {
// do something
} else if (UserActionTypeEnum.SHARE.name().equalsIgnoreCase(actionType)) {
// do something
} else if (UserActionTypeEnum.ADD_POST_TO_BANK.name().equalsIgnoreCase(actionType)) {
// do something
}
}
}
catch (Exception e) {
logger.error("Exception in saveUserActionOnPost() >> " + e.getStackTrace());
}
return "success";
}
}
但是我收到以下错误:
HTTP状态405 - 不支持请求方法“POST”,不允许为请求的资源指定HTTP方法 任何帮助,这里有什么问题
答案 0 :(得分:2)
实际上它是一个安全的网址。在我的产品中使用spring security。需要在ajax调用中发送csrf信息。然后它工作了
var token = $('#csrfToken').val();
var header = $('#csrfHeader').val();
$.ajax({
type : "POST",
url : "./home/useraction/save",
data : {
pId : pId,
cId : cId,
type : type
},
async : true,
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader(header, token);
},
答案 1 :(得分:1)
我建议将完整请求的url写入控制器,与ajax相同。 把它写进ajax 类型:'POST', dataType:'json',