15年软件开发经验 只做源码定制 互联网+定制化解决方案

15年软件开发经验,只做源码定制!

原创设计 定制开发

满足您的个性化需求

当前位置:首页 前端开发 js

SpringBoot 出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported

庞凯博| 发布于 2021-11-07 00:01:39| 393阅读| 0点赞| 0评论
举报

Java处理前端返回数据不正确格式错误会报上述异常

问题点1:

如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是json对象的话,会报上述错误。

请求中传jsON时设置的Content-Type 如果是application/json或者text/json时,JAVA中request.getParameter("")怎么也接收不到数据。这是因为,Tomcat的HttpServletRequest类的实现类为org.apache.catalina.connector.Request(实际上是org.apache.coyote.Request)。

问题点2:

前端请求的Content-Type是json时,可以用@RequestBody这个注解来解决。@RequestParam 底层是通过request.getParameter方式获得参数的,换句话说,@RequestParam 和request.getParameter是同一回事。因为使用request.getParameter()方式获取参数,可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。所以,@RequestParam可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。@RequestParam用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST。

@RequestBody接受的是一个json对象的字符串,而不是json对象,在请求时往往都是json对象,用jsON.stringify(data)的方式就能将对象变成json字符串。

总结:

前端请求传json对象则后端使用@RequestParam;

前端请求传json对象的字符串则后端使用@RequestBody。

技巧:前端如何改变返回数据结果,对应后端

当后端使用@RequestParam,

$.ajax({
                type: "GET",
                url: "http://localhost:8080/Query",
                dataType: "json",
                data:{ 这里使用对象
                    serviceName: ServiceName,
                    orderNumber: OrderNumber,
                    time: Time
                },                success: function (data) {
                  console.log(data)
                },
                error: function (XHR, textStatus, errorThrown) {
                   console.log(XHR)
                },
                headers: {
                    "Authorization": loginToken
                }
            })
        });

后端使用@RequestBody。

var objects={ serviceName: ServiceName,
  orderNumber: OrderNumber,
  time: Time
}$.ajax({ type: "GET", url: "http://localhost:8080/Query", dataType: "json", data:jsON.stringify(objects),//这里使用把对象序列化 success: function (data) { console.log(data) }, error: function (XHR, textStatus, errorThrown) { console.log(XHR) }, headers: { "Authorization": loginToken } }) });


0

0条评论

别默默看啦~登录/注册一起参与讨论吧~

热门标签

庞凯博
微信扫一扫立即咨询
账号登录|扫码登录

立即注册 |忘记密码?

欢迎注册

已有账号马上登录

重置密码

扫码绑定微信
微信扫一扫

绑定手机号

分享到-微信

举报

  • 举报类型:

  • 举报描述:

您好,当前积分不足。

在线客服
拨打电话
17330196230 13230981129
顶部