JAVA读取前端http请求参数的方法

1、利用@PathVariable

参考:@PathVariable注解的用法和作用
这种是restful风格的读取参数的方法,一般用于GET请求
前端传参方法

  1. - /order/1 HTTP GET :得到 id = 1 order
  2. - /order/1 HTTP DELETE:删除 id = 1 order
  3. - /order/1 HTTP PUT:更新id = 1 order
  4. - /order/1 HTTP POST:新增 order
  1. /**
  2. * 根据id查询用户信息
  3. *
  4. * @param id
  5. * @return
  6. */
  7. @GetMapping("/{id}")
  8. public R<Users> getById(@PathVariable Long id) {
  9. Users users = usersService.getById(id);
  10. if (users != null) {
  11. return R.success(users);
  12. }
  13. return R.error("没有查询到对应的用户信息");
  14. }

2、利用@RequestParam

参考:https://blog.csdn.net/ChineseSoftware/article/details/118414454
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
后端使用是,可以省略@RequestParam,如果不指定接收参数的方法,就是默认@RequestParam
后端接收参数,可以使用多参数的方法接受

  1. /**
  2. * 用户新增
  3. *
  4. * @param users
  5. * @return
  6. */
  7. @PostMapping
  8. public R<String> save(@RequestParam Users users) {
  9. usersService.save(users);
  10. return R.success("新增用户成功!");
  11. }

3、利用@RequestBody

@RequestBody注解一般主要是用来处理content-type:”application/json charset=utf-8”或者content-type:”application/xml charset=utf-8”两种请求数据,一般是异步请求用的比较多些,
前端用json或者xml来发送数据的。

  1. /**
  2. * 封装put请求 RESTful风格,主要用于“修改”
  3. * @param url 请求地址
  4. * @param data 请求数据:JSON
  5. * @returns {Promise} 成功返回的是res.data数据
  6. */
  7. export function PUT(url, data = {}) {
  8. return new Promise((resolve, reject) => {
  9. axios({
  10. method: 'put',
  11. url,
  12. data,
  13. headers: {
  14. 'content-type': 'application/json'
  15. }
  16. })
  17. .then(res => {
  18. resolve(res.data);
  19. }).catch(err => {
  20. reject(err)
  21. });
  22. })
  23. }

后端接收,只能使用一个对象来接收参数,可以使用java对象,或者使用map对象,或者list也可以。

  1. /**
  2. * 用户信息分页查询
  3. * <p>
  4. * // * @param pagenum
  5. * // * @param pagesize
  6. *
  7. * @param users
  8. * @return
  9. */
  10. @PostMapping("/show")
  11. public R show(@RequestBody Users users) {
  12. return usersService.show(users);
  13. }

4、MultipartFile是用来接收前端二进制文件数据的

前端是formData格式的数据 ‘Content-Type’: ‘multipart/form-data’,

  1. /**
  2. * post方法上传文件,
  3. * @param {String} url [请求的url地址]
  4. * @param {Object} params [请求时携带的参数]
  5. */
  6. export function UPFILE(url, formData) {
  7. return new Promise((resolve, reject) => {
  8. axios({
  9. method: 'post',
  10. url: url,
  11. data: formData,
  12. headers: {
  13. 'Content-Type': 'multipart/form-data' //上传文件请求头
  14. }
  15. })
  16. .then(res => {
  17. resolve(res.data);
  18. }).catch(err => {
  19. reject(err)
  20. });
  21. });
  22. }

后端接收文件,使用MultipartFile,其他formData里的数据,使用@RequestParam方法接收就可以。

  1. /**
  2. * 修改个人信息,包括修改头像图片
  3. *
  4. * @param file 头像图片
  5. * @param users 用户信息
  6. * @return
  7. */
  8. @PostMapping("/selfinfo")
  9. public R<String> modifyWithAvatar(MultipartFile file, Users users) {
  10. log.info("接受的file:{}", users);
  11. try {
  12. if (file != null) {
  13. String url = "imgs/avatar/"; //指定保存头像的路径
  14. String filename = users.getId() + ".jpg"; //用帐号名作为头像名称
  15. String avatar = TjFileUtils.handleUpFileRelativePath(file, url, filename);
  16. log.info("保存的路径:{}",avatar);
  17. users.setAvatar(avatar);
  18. }
  19. if (usersService.updateById(users)) {
  20. return R.success("修改成功");
  21. }
  22. return R.error("修改失败");
  23. } catch (IOException e) {
  24. return R.error(e.getMessage());
  25. }
  26. }