关于Http status415的问题

首先这个问题,我也查询了很久,但是实际上要想找到满足自己情况的还是蛮难的。
这个错误码的问题就是不可支持媒体类型。
这个是什么意思呢,就是无法解析,大家看看我下面的代码:

/*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 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字符串,如果你不设置这句话的话,前台传过来的结构就是不可解析媒体类型。
其实大部分的错误都很简单,自己好好分析一下就可以锁定错误大致地点了

你可能感兴趣的:(出错集)