zoukankan      html  css  js  c++  java
  • 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时,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。

    注意事项

    对于这种第三方发送数据的接口,接收类型最好为String
    使用JosnObject会出现一些问题,比如字段映射不到,或者转Sting是缺少引号“”,Json格式有误等
    

  • 相关阅读:
    从string类的实现看C++类的四大函数 [写的很好]
    毕业5年决定你的命运
    git push 原因以及问题!
    poj 1195 Mobile phones 夜
    poj 2886 Who Gets the Most Candies 夜
    poj Asimple Problem With Integers 夜
    poj 2750 Potted Flower 夜
    poj 2528 Mayor's posters 夜
    poj 2777 Count Color 夜
    poj 2482 Stars in Your Window 夜
  • 原文地址:https://www.cnblogs.com/Lm-Ui-Gne/p/13724247.html
Copyright © 2011-2022 走看看