今天在使用springboot获取前端参数的时候,遇到了一些坑,一般前端在传参数的时候有两种,一种是放在请求头里面,一种是放在请求体里面
(请求头带参数)放在请求头里面也有两种不同的方法,(post,get均可以在url后拼接参数,只是在数据量大时用post请求,post请求一般是把参数放在请求体里面),
(一) 通过?后加参数名,多个参数用&连接 例如 http://localhost/demo/addUser?username=wjw&password=123456 这种方法前端提交的参数名称必须和后端Controller方法中定义的参数名称一致
传多个参数可以用这种办法
(a)后端获取值是可以直接获取例如 public String addUser(String username,String password){}, 这个获取参数的方法适合get提交,而不适合post提交
(b)也可以通过一个bean 来封装获取参数,springboot框架会按照bean里面的名称来自动装配, 适用于post和get方法。
(c)或者直接用HttpServletRequest 来获取参数,例如 String username=request.getParameter("username") 适用于post和get方法。
(d)如果要设置属性来规范参数是否为必填时,可用@RequestParam 注解来实现 例如: @RequestParam(value="username", required=false)
(二) 直接将参数放在url后面,用/隔开 例如 http://localhost/jayvee/demo/addUser4/wjw/123465 使用这种方法提交参数,后台应该使用@PathVariable注解获取参数,
@PathVariable String username,@PathVariable String password 赋值的顺序是一样的,一般来说只是传一个参数的时候用这种办法
(请求体带参数) 这个一般就是指post方法
使用@RequestBody注解实现,
(一) 当前端传递原生表单时 例如 application/x-www-form-urlencoded (form表单默认的类型)
前端参数样式
(a)使用@requestbody来获取 例如 public Result update(@RequestBody JsMessage jsMessage) {}
(b)或者直接获取 例如 public Result update(JsMessage jsMessage) {}
(二)当前端传递json等数据时 ,例如 application/json,application/xml等
前端参数样式:
(a)当前端使用json或者xml等格式传递数据时后端必须用@requestbody来获取参数,(反之不成立 ,前端使用 application/x-www-form-urlencoded 传递原生表单时也可以用@requestbody获取)
因为@requestbody是获取请求体里面的参数,只要放在请求体里面,它都可以获取到
但是这样获取参数必须要一个bean来封装参数 例如 public Result update(JsMessage jsMessage) {}
(b) 如果不用bean封装参数也可以 使用 @RequestBody JSONObject object 也可以获取到参数
例如
public Result update(@RequestBody JSONObject object ) {
Object testInfo= object.get("testInfo");
}
(三) 当前端传递文件时 multipart/form-data