@RequestBody出现请求415问题

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

大家好,又见面了,我是你们的朋友全栈君。

首先之前也遇到过这样的问题,但是稀里糊涂的最后虽然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),

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136622.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python输入方式大全

    python输入方式大全python输入方式总结写在开头:在学算法过程中想温习python结果发现连输入都不清楚我是菜鸡总结一下python的输入方式适用于各种网站的算法题目的输入格式单个输入 #单个输入n=input()#无参数默认返回字符串n=input(“有提示参数的输入”)#有提示性输入语句的输入,仍是以str类型返回n=int(input())#根据给定的类型输入,返回值类型intn=float(input())#根据给定的类型输入,返回

    2025年6月10日
    3
  • itemdatabound小结

    itemdatabound小结在DATAGRID中,如果要对某些记录进行格式化或者修饰,用到itemdatabound事件比较方便,比如,要显示某人的存款金额已经少于某个数额了,要用红色来显示等。itemdatabound事件发生在数据绑定到datagrid后,而其内容发送到客户端前。比如privatevoidOnItemDataBound(objectsender,       System.Web.UI.WebC

    2022年10月13日
    3
  • 怎样选择一个好的虚拟主机

    怎样选择一个好的虚拟主机

    2021年9月22日
    45
  • 文件上传控件fileinput

    文件上传控件fileinput需求:当上传的文件类型为word或者pdf的时候,直接显示文件的icon;为图片的时候就是图片内容的预览。需要的文件依赖:<scriptsrc="js/fileinput.min.js"></script><scriptsrc="js/fileinput_zh.js&am

    2022年5月8日
    38
  • 全是精华的模电专题复习资料:基本放大电路知识点

    全是精华的模电专题复习资料:基本放大电路知识点目录一、BJT组成的基本放大电路二、FET组成的基本放大电路一、BJT组成的基本放大电路根据上图解答以下三个问题:1、最大不失真输出电压:Uom=2、三种组态之间的性能差异:3、分析任何放大电路均为先静态Q、后动态Au、Ri、Ro。二、FET组成的基本放大电路…

    2022年6月20日
    28
  • 几种java反编译软件的安装以及使用总结

    几种java反编译软件的安装以及使用总结公司要和别的公司合作,有些代码不希望让他们知道,最近老大们在弄代码混淆的事,而我就做起了测试代码混淆的工作。印象笔记更新之后不能用了,就整理在博客上吧。下面是在网上找的几种反编译软件的安装以及使用:一、JD-JUI官网下载链接:http://jd.benow.ca/下载之后解压,点击“jd-gui.exe”运行:直接将".jar"文件拖入进去即可查看里边的“.class”文件,如上图所示。二:Lu…

    2022年6月3日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号