前后端分离的项目, 跟前端同事配合调接口,总是发现参数接收出各种各样的问题,正好整理了一下, 直接上结论:
方式一:
- 前端请求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这种就可以接收了)
- 后台接收方式一:直接一个对象接收,不加任何注解!
方式二:
- 前端请求方式不变, 同方式一
- 后台接收方式二:@RequestParam(value="username") String username,@RequestParam(value="password") String password, 即@RequestParam注解方式接收
方式三:
- 前端请求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注解加对象接收
方式四:
- 前端请求方式不变, 同方式三
- 后台接收方式二:login(@RequestBody Map<String,String> map) 即@RequestBody注解加map接收
- 这种方式对应的前台传递的是一个对象转成的json,用map接收; 如果前台传递的是一个对象数组转的json 后台用List<Map<String,String>>接收即可 复杂对象(属性含数组的对象) Map换成Map<String,Object>
经常用到的基本就这几种了,之后再遇到的看看再更新罢
这有没有预览功能呢 不知道发布以后啥样子