Spring Boot中前后端传递数据方式
postman作为客户端
目前前后端分离开发中用到的最流行的的参数格式是application/x-www-form-urlencoded和application/json。每一种方式都有严格的参数传递格式,如果前后端参数格式传递的不一致,就会出现访问接口异常或者接口接收到的参数为null的情况
HTTP请求方法有GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT。
最常用的GET和POST,这两种方法在Spring中有下面几个注解可以指定
@RequestMapper(value="value")//默认是GET方式
@RequestMapping(value="value", method=RequestMethod.POST)
//下面两个是@RequestMapping和GET/POST的组合注解
@GetMapping("value")
@PostMapping("value")
GET
- 参数为基本数据类型,前端指定Content-Type为application/x-www-form-urlencoded。
@RequestMapping(value = "/login-get", method = RequestMethod.GET)
public String login(String username, String password){
return username + ":" + password;
}
postman中访问及返回
接口中的参数可以使用@RequestParam修饰,也可以使用@PathVariable("username")修饰。
- 参数为引用对象类型,参数不加@RequestBody修饰,前端指定Content-Type为application/x-www-form-urlencoded。
@RequestMapping(value = "/login-get-dto", method = RequestMethod.GET)
public String loginGetDto(LoginDto loginDto){
return loginDto.toString();
}
postman中访问及返回
- 参数为引用对象类型,加@RequestBody修饰,这种情况下,就不能使用上面的参数形式,需要设置Content-Type为application/json。
@RequestMapping(value = "/login-get-dto-rb", method = RequestMethod.GET)
public String loginGetDtoRb(@RequestBody LoginDto loginDto){
return loginDto.toString();
}
在postman中使用json的方式,放问及返回如下
POST
- 参数为基本类型数据,前端指定Content-Type为application/x-www-form-urlencoded。
@RequestMapping(value = "/login-post", method = RequestMethod.POST)
public String loginPost(String username, String password){
return username + ":" + password;
}
postman中访问及返回如下
- 参数为引用类型对象,不用@RquestBody修饰,前端指定Content-Type为application/x-www-form-urlencoded。
@RequestMapping(value = "/login-post-dto", method = RequestMethod.POST)
public String loginPostDto(LoginDto loginDto){
return loginDto.toString();
}
postman中请求及返回
- 参数为引用类型对象,@RquestBody修饰,前端传参需要设置Content-Type为application/json
@RequestMapping(value = "/login-post-dto-rb", method = RequestMethod.POST)
public String loginPostDtoRb(@RequestBody LoginDto loginDto){
return loginDto.toString();
}
postman中请求及返回
文件上传
对于GET和POST方法都一样,前端传参需要设置Content-Type为form-data
@RequestMapping(value = "/upload")
public String upload(MultipartFile file){
return file.getOriginalFilename();
}
postman中访问
文件和实体同时上传
使用Post传参,设置Content-Type为 multipart/form-data
@PostMapping("/upload")
public String upload(MultipartFile file, LoginDto loginDto){
logger.info("/session,loginDto={}", loginDto);
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", "0");
jsonObject.put("msg", "成功");
jsonObject.put("file", file.getOriginalFilename());
jsonObject.put("loginDto", loginDto);
return jsonObject.toString();
}
postman中访问
以上是笔者目前使用到的前后端参数传递方式,如有遗漏,欢迎大家补充