ajax post请求报错415或400解决方案

2021-01-15 07:14

阅读:372

YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

标签:有关   点击   ati   远程调用   username   ping   success   没有   默认   

ajax post请求报错415或400解决方案

jsp页面


Title

java代码

@Controller
@RequestMapping(path = "/user")
public class UserController {
  /**
     * 模拟异步请求和响应
     */
    @RequestMapping(path = "/testAjax",method = RequestMethod.POST)
    public @ResponseBody User testAjax(@RequestBody User user){
        System.out.println("testAjax方法执行了...");

        //浏览器发送ajax请求,传的是json字符串,后端把json字符串封装到user对象中
        System.out.println(user);

        //模拟从数据库中查数据
        user.setUsername("张三");
        user.setPassword("456");
        user.setAge(30);
        return user;
    }
}

只要点击 发送ajax 按钮,就报了如下错误:

技术图片

HTTP的状态码415为

415 Unsupported Media Type 服务器无法处理请求附带的媒体格式 (不支持的媒体类型)

基本上就是跟 content-type 有关 (content-type:设置发送给服务器数据的格式)

查看一下请求头信息

技术图片

tips:

post提交数据四种常见的content-type取值:

1.application/x-www-form-urlencoded :
	最常见的 POST 提交数据的方式
2.multipart/form-data :
	使用表单上传文件时,传递这个值
3.application/json :
	用来告诉服务端发送的数据是序列化后的 JSON 字符串
4.text/xml :
	使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范

所以不难发现为什么默认的是 application/x-www-form-urlencoded

也知道我们该用哪一个值了

初次修改:

但还是报错了,报400

技术图片

看下请求头中的contentType

技术图片

contentType已经修改过,为什么报400呢?

因为前后台传入的数据不匹配,后台无法解析数据,告诉服务端数据是序列化后的 JSON 字符串,

但是JSON数据确没有序列化或是没有满足JSON的格式。

所以需要对json进行序列化 ==>JSON.stringify( )

JSON.stringify( ) 后面会做简单说明

再试一次,控制台打印了:

testAjax方法执行了...
User{username=‘liangge‘, password=‘123‘, age=18}

控制台也输出了数据:

技术图片

OK 成功!!!


JSON.stringify() 把 JavaScript 对象转换为字符串,对 JavaScript 对象进行字符串化

也可以用作来对json数据进行序列化

示例:

ajax post请求报错415或400解决方案

标签:有关   点击   ati   远程调用   username   ping   success   没有   默认   

原文地址:https://www.cnblogs.com/liqiliang1437/p/13399394.html


评论


亲,登录后才可以留言!