Vue中使用axios调用后端接口的坑

问题场景:Vue.js工程中使用axios调用后端接口(SpringBoot构建)出现后端接口没法得到数据的状况,所以总结了以下场景:前端

  • @RequestParam用来处理application/x-www-form-urlencoded编码(HTTP协议请求头中不指定Content-Type默认就是application/x-www-form-urlencoded)。
  • @RequestParam能够接受简单类型的属性,也能够接受对象类型的属性,实质就是将Request.getParameter()中的键值对Map利用Spring的转化机制ConversionService配置,转化成参数接受对象或者字段。
  • @RequestParam在GET请求中是QueryString的形式,POST请求BodyData的值都会被Servlet接受并转化为Request.getParameter()参数集中。
  • @RequestParam在POST请求指定Content-Typeapplication/json;charset=UTF-8时会出现400错误。
  • @RequestParam不能使用@RequestParam JSONObject params接受参数,不然会出现500错误。
  • @RequestParam前端不能使用JSON.stringify()格式化参数,能够使用axios中的QS代替:QS.stringify()
  • @RequestBody用来处理HTTPEntity(HTTP实体,HttpEntity实体便可以使流也能够使字符串形式)传递过来的数据,通常用于处理非application/x-www-form-urlencoded编码。
    GET请求没有HTTPEntity因此@RequestBody并不适用,不然参数会乱码致使400错误。
  • 在POST请求中使用@RequestBody时,经过HTTPEntity传递参数,必需要在HTTP请求头设置Content-Typeapplication/json;chatset=UTF-8,不然会出现415错误,SpringMVC经过使用HandlerAdapter配置HTTPMessageConverter来解析HTTPEntity中的数据,而后绑定到Bean上。
  • 在POST请求使用@RequestBody时,前端必须使用JSON.stringify()格式化为JSON字符串数据。
注解 支持类型 支持的请求类型 支持的Content-Type请求头类型
@PathVariable URL GET ALL
@RequestParam URL GET ALL
@RequestParam Body ALL application/form-data, application/x-form-www-urlencoded
@RequestBody Body ALL aplication/json
相关文章
相关标签/搜索