前端请求中,不同contentType、data格式及相对应的后端接收方式(直接对象接收,@RequestParam注解,@RequestBody注解)总结

时间:2024-03-28 07:13:42

前后端分离的项目, 跟前端同事配合调接口,总是发现参数接收出各种各样的问题,正好整理了一下, 直接上结论:

方式一:

  • 前端请求contentType:   application/x-www-form-urlencoded; charset=UTF-8(ajax不单独设置contentType,即默认的类型)
  • 前端请求参数类型:   var param = {'username':'tom','password':'nice'}   即:传递一个js对象,而不是json字符串,也就是不能JSON.Stringify(param),区别后续方式三和四
  • 参数形式:   Form Data:   username=tom&password=nice
  • Request URL:   post请求时,url后不会拼接上上边的form data,也就是http://xxx:8088/loginController/login; get请求时,url后会拼接上上边的form data,也就是http://xxx:8088/loginController/login?username=tom&password=nice(不过此点貌似没有用,如果get请求,则后台不需要注解,直接String username这种就可以接收了)
  • 后台接收方式一:直接一个对象接收,不加任何注解!

前端请求中,不同contentType、data格式及相对应的后端接收方式(直接对象接收,@RequestParam注解,@RequestBody注解)总结

方式二:

  • 前端请求方式不变,  同方式一
  • 后台接收方式二:@RequestParam(value="username") String username,@RequestParam(value="password") String password, 即@RequestParam注解方式接收

前端请求中,不同contentType、data格式及相对应的后端接收方式(直接对象接收,@RequestParam注解,@RequestBody注解)总结

方式三:

  • 前端请求contentType:   ajax中单独设置为: application/json
  • 前端请求参数类型:   var param = {'username':'tom','password':'nice'}   ajax中的data:JSON.Stringify(param) 即:传递json字符串而非js对象,此即上文说的"区别方式三和四"
  • 参数形式:   Request Payload:   {"username":"tom","password":"nice"}
  • Request URL:   post请求时,url后不会拼接上上边的request payload,也就是http:/xxx:8088/loginController/login; get请求时,url后会拼接上上边的request payload(实际 这里叫做query string parameters),也就是http://xxx:8088/loginController/login?{%22username%22:%22tom%22,%22password%22:%22nice%22} %22应该是编码问题 应该为双引号
  • 后台接收方式一:login(@RequestBody User user1) 即@RequestBody注解加对象接收

前端请求中,不同contentType、data格式及相对应的后端接收方式(直接对象接收,@RequestParam注解,@RequestBody注解)总结

方式四:

  • 前端请求方式不变,  同方式三
  • 后台接收方式二:login(@RequestBody Map<String,String> map) 即@RequestBody注解加map接收
  • 这种方式对应的前台传递的是一个对象转成的json,用map接收; 如果前台传递的是一个对象数组转的json 后台用List<Map<String,String>>接收即可 复杂对象(属性含数组的对象) Map换成Map<String,Object>

前端请求中,不同contentType、data格式及相对应的后端接收方式(直接对象接收,@RequestParam注解,@RequestBody注解)总结

经常用到的基本就这几种了,之后再遇到的看看再更新罢

这有没有预览功能呢 不知道发布以后啥样子