@RequestBody出现请求415问题

@RequestBody出现请求415问题首先之前也遇到过这样的问题 但是稀里糊涂的最后虽然 bug 修复了 但是不知道是啥原因 今天又遇到了同样的问题 问题 在前端向后台发送一个 json 对象 字符串 后端用 RequestBody 匹配接受的时候就会出现 415 如果不用 RequestBody 那么前端发送来的数据是不能被正确解析成对象里的属性的 因为用公司的框架写项目的时候 也遇见了这个问题 请教了学长

首先之前也遇到过这样的问题,但是稀里糊涂的最后虽然bug修复了,但是不知道是啥原因,今天又遇到了同样的问题。

问题:在前端向后台发送一个json对象(字符串),后端用@RequestBody匹配接受的时候就会出现415,如果不用@RequestBody,那么前端发送来的数据是不能被正确解析成对象里的属性的。

因为用公司的框架写项目的时候,也遇见了这个问题。请教了学长,学长让我用公司自己封装的post请求方法去请求,结果415bug就不见了。于是开始怀疑是自己的问题。

废话不多说了,上代码
js:
注意1:这两项必须配置,这样json才能正确的转换
dateType:“json”,
contentType : ‘application/json’,
这个地方尤其要注意一定要指定contentType的值为『“application/json”』 ,因为此处@RequestBody接受的是一个通过json转换的对象
//如果不设置,默认为text/html,那么是支持该种类型的,会报415错误

注意2:data:JSON.stringify(this.queryParam)
因为对象是不能在网络中传输的,网络只能识别字符串,所以我们这里要把JSON对象转换成JSON字符串。后台的@RequestBody的作用是将传过来的字符串转换成对象,然后将该对象里的属性绑定到controller的对象参数的对应属性里。注:前台穿过来的json对象的key,一定要和实体类中共的属性对应,否则是绑定不成功的。

 pageUserList:function () {
$.ajax({
type:"post",
url:"/customer/pageData.do",
dateType:"json",
contentType : 'application/json',
data:JSON.stringify(this.queryParam),
success:function(result){
app.userList=result.rows;
app.pagination.total=result.total;
// 重新加载数据,即重新请求数据,并加载
console.log(app.userList);
// data:JSON.stringify(this.queryParam),
// 因为对象是不能在网络中传输的,(Json对象也是对象),所以这里要将json对象转换成json字符串
// 然后再传输,后台的springmvc的@RequesyBody会将json字符串再转换成对象

//这个地方尤其要注意一定要指定contentType的值为『"application/json"』 ,因为此处@RequestBody接受的是一个通过json转换的对象
//如果不设置,默认为text/html,那么是支持该种类型的,会报415错误
}
});

controller

@RequestMapping("/customer/pageData.do")
@ResponseBody
public MyPage pageData(@RequestBody MyPage myPage){

System.out.println(myPage.getPageSize()+"===="+myPage.getPageNumber());
return customerService.pageData(myPage);
}

@RequesyBody

@RequestBody

作用:

i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
iii)@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。所以如果前端ajax传过来的是application/x-www-form-urlcoded然后后台用springMvc的@requestBody Object obj 因为类型不一致 此时也是会报415错误的

使用时机:

A) GET、POST方式提时, 根据request header Content-Type的值来判断:

application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);


B) PUT方式提交时, 根据request header Content-Type的值来判断:



application/x-www-form-urlencoded, 必须;
multipart/form-data, 不能处理;
其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;

@ResponseBody

@ResponseBody



作用:

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

使用时机:

返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

注:推荐一个将@RequesyBody和@ResponseBody比较好的帖子
https://www.cnblogs.com/qq78292959/p/3760651.html

ps:知道网络不能传递对象,只能传递字符串,但是当真正写代码的时候还是不懂为什么要这样写

 data:JSON.stringify(this.queryParam),

以后还是要多实践,多思考

编程小号
上一篇 2025-08-08 22:51
下一篇 2025-04-02 23:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/134690.html