POST http://localhost:8080/blog/submitForm 415 (Unsupported Media Type)
POST http://localhost:8080/blog/submitForm 400 (Bad Request)
需求:将一个json字符串传给后台,使用ajax,结果实现的时候,前端先是415,后是400报错。把整个过程错误及解决的方法记录下来,供大家参考。
下图是我最开始的ajax代码及后台controller层接收方法的代码
$(".layui-btn").click(function () {
var params = {"title":$("#title").val(),"selectCategory":$("#selectCategory").val(),"content":$("#editor_container").val()}]
$.ajax({
type: "post",
url: "/blog/submitForm",
data: params,
dataType: "json",
success: function(result){
}
});
})
@RequestMapping(value = "/submitForm", method = RequestMethod.POST)
@ResponseBody
public String submitForm(@RequestBody JSONObject data){
System.out.println("进入到submitForm");
System.out.println(data.get("title"));
System.out.println(data.get("content"));
return "";
}
运行时415报错:
POST http://localhost:8080/blog/submitForm 415 (Unsupported Media Type)
原因:缺少contentType:'application/json'
这是因为后台是以json对象接收参数,所以你在ajax请求这里要设置好。
这行代码是用来告诉服务器,应该用怎样的方式去处理请求主体。相当于是,你将请求主体中的数据发送出去之后,你还必须告诉服务器,我发送的数据是什么类型的,这样服务器才能正确解析请求主体的内容(如果没有content-type或者content-type的设置是错的,都会导致浏览器无法正确解析请求主体,也就无法对数据做出正确响应了。
加上上面暖说说代码后,运行报错提示400:
POST http://localhost:8080/blog/submitForm 400 (Bad Request)
原因:缺少data: JSON.stringify(params),
我现在的代码传输的并不是json类型,而在我的后台接收,是接收json对象,所以需要对params进行json化。
最终正确的代码如下
var params = {"title":$("#title").val(),"selectCategory":$("#selectCategory").val(),"content":$("#editor_container").val()}
$.ajax({
type: "post",
url: "/blog/submitForm",
data: JSON.stringify(params),
dataType: "json",
contentType:'application/json',
success: function(result){
}
总结:不管是415还是400报错,都是“客户端发送的请求在语法上不正确。”即
所以使用ajax请求,多注意你的请求头设置。