今天在使用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表单默认的类型)

前端参数样式 

spring boot获取前端数据 springboot获取前端参数_获取参数

(a)使用@requestbody来获取 例如 public Result update(@RequestBody JsMessage jsMessage) {}

(b)或者直接获取 例如 public Result update(JsMessage jsMessage) {}

(二)当前端传递json等数据时 ,例如 application/json,application/xml等

前端参数样式: 

spring boot获取前端数据 springboot获取前端参数_获取参数_02

(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