相关文章推荐
稳重的佛珠  ·  JAR will be empty - ...·  1 周前    · 
忐忑的爆米花  ·  java.lang.IllegalArgum ...·  1 年前    · 
帅呆的炒粉  ·  关机了 cron job ...·  1 年前    · 

1. 问题引入

今天给app调接口的时候遇到一个问题,说接口不能用,报500的错。
内容是: {"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","code":500}

2. 问题解决

很明显是请求头的问题,解决办法是给header加上 content-Type: "application/json;charset=utf-8" 即可解决。

3. 后续思考

问题是可以解决了,不过我在网上又找了几篇文章深度解读一下。

文章是这样写的:

有段时间没做过javaweb了,有点生疏了,js也忘记得差不多,所以今天下午做前后端交互的时候,传到后台的参数总是为空,前端控制台了报一个String parameter “xxx” is not present的错误。

  $.ajax({
        type: 'GET',
        url: '/weibo/list',
        cache: 'false',
        data: {
            "startdt": formData['startdt'],
            "enddt": formData['enddt'],
            "provinceName": formData['provinceName']
        dataType: 'json',
        //contentType : 'application/x-www-form-urlencoded;charset=UTF-8',
     headers : {
        'Content-Type' : 'application/json;charset=utf-8'
        success: function (result) {...}
   @RequestMapping("/list")
   @ResponseBody
   public List<Object> getWeiboAndCellList(@RequestParam("startdt") String date1, @RequestParam("enddt") String date2, @RequestParam("provinceName") String province) {...}

之前出错是因为我没有加@RequestParam注解,它的作用等同于HttpServletRequest request,request.getParameter("")。但是这里有个细节,如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果设置为“application/json;charset=utf-8”,会报上述错误。ajax传JSON时设置的contenttype 如果是application/json或者text/json时,JAVA中request.getParameter("")怎么也接收不到数据。这是因为,Tomcat的HttpServletRequest类的实现类为org.apache.catalina.connector.Request(实际上是org.apache.coyote.Request)。

当$.ajax content-Type是json时,可以用@RequestBody这个注解来解决。

var obj ={};
obj["user"] = JSON.stringify(this.update);
obj["classRoomId"] = this.classRoomid;
$.ajax({
         type: 'POST',
         url: url,
         dataType: 'json',
         cache: false,
         headers : {
               'Content-Type' : 'application/json;charset=utf-8'
        data: JSON.stringify(obj),
        success: function (result) {...}
});
@RequestMapping("/updateUser")
@ResponseBody
public User updateUser(@RequestBody Map<String, Object> map){...}

原因:
  @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对象,在ajax请求时往往都是Json对象,用JSON.stringify(data)的方式就能将对象变成json字符串。
  @RequestBody接收的是一个字符串,返回的参数可以是一个Map对象。

application/json
  ajax请求中content-type:application/json代表参数以json字符串传递给后台,controller接收需要@RequestBody 接收参数 例如:@RequestBody Map<String, Object> map,也可以使用类接收@RequestBody User user

application/x-www-form-urlencoded
  ajax请求中content-type:application/x-www-form-urlencoded代表参数以键值对传递给后台,controller接收可以单个参数接收,如@RequestParam(“param”) String param;也可以用类接收User user,参数名需一 一对应
  
参考文章:
https://www.cnblogs.com/shirandedan/p/7727326.html
     https://blog.csdn.net/feiyst/article/details/88431621

1. 问题引入今天给app调接口的时候遇到一个问题,说接口不能用,报500的错。内容是:{"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported","code":500}2. 问题解决很明显是请求头的问题,解决办法是给header加上content-Type: "application/json;charset=utf-8"即可解决。3. 后续思考问题是可以解决了,不过我在网上又找了几 用 Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型。 下边是说明: application/x-www-form-urlencoded : 窗体数据被编码为名称/值对。这是标准的编码格式。 multipart/form-data : 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。 text/plain : 窗体数据以纯文本形式进行编码,其中不含任何控件或格式字符。 form的enctype属性为编码方式,常用有两种: application/x-www-form-urlencoded 和 mult @PostMapping("/delete") public ResultMsg delete(@RequestBody Map<String,Object> params){ ...... 请求报错:Content type 'application/x-www-form-urlencoded;charset=UTF-8' no... 在公司开发项目中,当前端传来参数时,前端却报错,报错信息显示”Content typeapplication/x-www-form-urlencoded;charset=UTF-8’ not supported“ 此问题的原因是因为前后端数据交互出现json数据类型不符合 json 分为两种类型; (1) json 对象类型,即前端定义的Content typeapplication/x-www-form-urlencoded等 (2) json字符串类型,即前端定义的Conten 使用WxPusher微信推送服务 ,可以及时的将服务的一些运行异常信息,发送到自己的微信上,方便了解服务的运行状态(PS:这个服务是免费的)。 你可以在这里看到WxPusher微信推送服务的接入说明文档:https://wxpusher.zjiecode.com/docs/ 你可以在这里体验他的功能:https://wxpusher.zjiecode.com/demo 真的非常好用,强烈推送用来发送提示消息。 看到官方的接入文档,接入的时候,出现了错误: "code&quo
问题点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的HttpSer
控制台报如下消息提示: Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported] 2019-09-11 22:48:32.829 WARN 12904 ...
SpringBoot 出现 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
问题点1: 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。 请求中传JSON时设置的Content-Type如果是application/json或者text/json时,...
传参数,后台@RequestBody接收实体,报错:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported 解决方案:添加红字处的内容,既可以解决问题 $.ajax({   type : "post",   url : submiturl,   ...
最近做微信小程序支付(JSAPI支付),支付回调采用流读取方式读取回调信息,但为简便,可以通过@RequestBody直接接收字 符串,在demo中测试可以,但在项目中不行(报HttpMediaTypeNotSupportedException: Content type ‘text/xml;charset=UTF-8’ not supported错),因此考虑是不是消息转换器的问题。 参数解析流程 学习 - 参数解析流程 缺失消息转换器 demo中
[问题]"msg":"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported", [解决办法] step1:在HTTP请求下添加一个“HTTP信息头管理器” step2:在“HTTP信息头管理器”界面,新增一行信息头:content-typeapplication/json...
1、首先response返回code500时,一般由两种原因引起,一是前端传参有问题,二是后台服务器问题,第二种情况需要去找后端沟通解决。这里只讨论第一种情况,前端传参问题。 2、我这里遇到的是参数格式的问题。 以下三张图片,可以看到在我连通的接口中: 1)response headers中content-typeContent-Type: application/json; charset=utf-8, 2)payload中的格式也是字符串的形式。 3)后台返回code500,并未获取到后台.
今天写前后端分离时候遇到了一个Contenttype'application/x-www-form-urlencoded;charset=UTF-8'notsupported这样的问题 如果Content-Type设置为“application/x-www-form-urlencoded;charset=UTF-8”无论是POST请求还是GET请求都是可以通过这种方式成功获取参数,但是如果前端POST请求中的body是Json对象的话,会报上述错误。
怎么解决Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"
【问题已解决】The server time zone value '?й???????' is unrecognized or represents more than one time zone 40207