首先这个问题,我也查询了很久,但是实际上要想找到满足自己情况的还是蛮难的。
这个错误码的问题就是不可支持媒体类型。
这个是什么意思呢,就是无法解析,大家看看我下面的代码:
/*ajax*/
$("#sendEmailButton").click(function(){
$.ajax({
type: "POST",
url: "/spring/user/sendEmail",
data: JSON.stringify({userEmails:$("#userEmail").val()}),
dataType: "json",
success: function(data){
console.log("123")
}
});
});
/**spring**/
@RequestMapping(value = "/sendEmail",method = RequestMethod.POST)
public ResponseEntity<Boolean> sendEmail(@RequestBody User user){
//这里的User里面有一个字段是userEmails
}
乍一看好像没什么问题,请求dataType也是json,我传的也是data虽然有点不规范,但是至少也是json。为什么后台就找不到呢?
我找的网上方案大概是:
1、data加JSON.stringfy()(不能解决)
2、前后请求类型一致(不一致会报405吧),明显和这个没啥关系
3、在RequesMapping中加入process,consume,header等属性(不能解决)
4、去掉了@requestBody(解决,但是这个肯定不是解决办法)
最终发现其实不用删除@requestBody,就是ajax那里少加了一句Content-type=”application/json;charset=utf-8”,仅仅而已.
//修改后版本
$("#sendEmailButton").click(function(){
$.ajax({
type: "POST",
url: "/spring/user/sendEmail",
contentType:'application/json;charset=utf-8',
data: JSON.stringify({userEmails:$("#userEmail").val()}),
dataType: "json",
success: function(data){
console.log("123")
}
});
});
requestBody(关于这个注解,可自行谷歌,百度)要求传过来的必须是json字符串,如果你不设置这句话的话,前台传过来的结构就是不可解析媒体类型。
其实大部分的错误都很简单,自己好好分析一下就可以锁定错误大致地点了