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

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对象的话,会报上述错误。
如果是这种状况:就把传入到后台的一个属性属性的拆分如下:

SpringBoot 出现 Content type application/x-www-form-urlencoded charset=UTF-8 not supported_第1张图片
把@RequestBody 接收换成@RequestParam String name,Integer id 把对象属性拿出来先进行接收。
在创建对象把接收的属性放对象中就可以啦。我是因为没找到更改Content-Type的参数位置所以这样做的。

请求中传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。

本文大部分内容来自:使用SpringBoot做Javaweb时,数据交互遇到的问题

————————————————
版权声明:本文为CSDN博主「feiyst」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feiyst/article/details/88431621

你可能感兴趣的:(java)