随着Java技术栈的发展,从Struts到struts2,经springmvc,再到目前最流行的springboot和spring cloud,springboot在web开发工作中的占据了90%以上的市场,即使公司没有使用微服务,不管前后端是否分离,也一定会使用spring boot,所以学好springboot是必备技能。本文主要介绍了使用restful风格进行springboot前后端参数传递,包含了前端代码,postman如何测试,后端代码参数接受等知识点。
分布式,微服务等知识这里不再赘述,想了解的同鞋可以看小编以前的博客
微服务 分布式 集群 负载均衡详述
spring boot springcloud dubbo概述
springcloud五大核心组件详述
代码中如何干掉太多的if else即if else的多种替代方案以提高代码质量通过公司代码审查
1.1 前端
(1)第一种
window.location = '/test/get/1';
(2)第二种Ajax
$.ajax({
url: '/test/get/1',
type: 'get',
dataType: 'json',
success: function (result) {
}
})
@RequestMapping("/test")
@RestController
public class ParamController {
@GetMapping("/get/{id}")
public Result method(@PathVariable("id") Long id){
System.out.println(id);
return Result.success();
}
}
1.4说明
@RestController:是 @Controller 和 @ResponseBody的组合注解,@Controller注解将类注入到spring ioc容器中;@ResponseBody 注解是将返回的数据结构转换为 Json 格式。
@GetMapping:相当于@RequestMapping(value = “/get”, method = RequestMethod.GET);@RequestMapping:是一个用来处理请求地址映射的注解。还有类似的注解例如,@PostMapping,@PutMapping,@DeteleMapping。
@PathVariable:主要是用来获取 url 参数,Spring Boot 支持 restfull 风格的 url,比如一个 GET请求携带一个参数 id 过来,我们将 id 作为参数接收,可以使用 @PathVariable 注解。
2.1 前端
(1)第一种
window.location = '/test/loginusername=wdy&password=123';
(2)第二种Ajax
var param = {
"username": "wdy",
"password": "123"
}
$.ajax({
url: '/test/get/1',
data: param,
type: 'get',
dataType: 'json',
success: function (result) {
}
})
@GetMapping("/login")
public Result method(String username,String password){
System.out.println(username+":"+password);
return Result.success();
}
2.4说明
@RequestParam:也是获取请求参数的,从 request 里面获取参数值。@RequestParam(value=“username”, required=true) , required 默认为 true,如果前台不传递此参数,后台会报错。如果设置为 false,如果不传,默认为 null。例如下图:
@RequestBody:注解用于接收前端Body中传来的参数,接收参数也是对应的实体,比如前端通过 json 提交传来两个参数 username 和 password,此时我们需要在后端封装一个实体来接收。在传递的参数比较多的情况下,使用 @RequestBody 接收会非常方便。
注意:
若后端使用@RequestParam 来接收前端传过来的参数的,Content-Type要设置为application/x-www-form-urlencoded。
若后端使用@RequestBody 来接收前端传过来的参数的,Content-Type要设置为application/json;
@GetMapping("/login")
public Result method(String username, @RequestParam(value="password")String password){
System.out.println(username+":"+password);
return Result.success();
}
3.1 前端
var param = {
"ids": [1, 2, 3]
}
//get请求
$.ajax({
url: "/test/list",
data: param,
type: "get",
dataType: "json",
success: function(data) {
}
});
//post请求
$.ajax({
url: "/test/list",
data: JSON.stringify(param);,
type: "post",
dataType: "json",
success: function(data) {
}
});
3.2 postman
get请求的第一种方式:
get请求的第二种方式:
post请求
3.3后端
//get请求--list集合
@GetMapping("/list")
public Result list(@RequestParam List ids){
System.out.println(ids);
return Result.success();
}
//get请求--数组
@GetMapping("/array")
public Result array(@RequestParam Long[] ids){
System.out.println(ids);
return Result.success();
}
//post请求--list集合
@PostMapping("/list")
public Result list2(@RequestBody List ids){
System.out.println(ids);
return Result.success();
}
//post请求--数组
@PostMapping("/array")
public Result array2(@RequestBody Long[] ids){
System.out.println(ids);
return Result.success();
}
4.1 前端
var param = {
"username": "wdy",
"password": "123"
}
//get请求
$.ajax({
url: '/test/get/1',
data: param,
type: 'get',
dataType: 'json',
success: function (result) {
}
})
//post请求
$.ajax({
url: "/test/list",
data: JSON.stringify(param);,
type: "post",
dataType: "json",
success: function(data) {
}
});
4.2 postman
@GetMapping("/map")
public Result map(@RequestParam Map map){
System.out.println(map);
return Result.success();
}
@GetMapping("/user")
public Result user(User user){
System.out.println(user);
return Result.success();
}
@PostMapping("/map")
public Result map2(@RequestParam Map map){
System.out.println(map);
return Result.success();
}
@PostMapping("/user")
public Result map2(@RequestBody User user){
System.out.println(user);
return Result.success();
}
4.4 说明
1.使用map接受get请求的参数,必须使用@RequestParam注解,而使用实体类接受get请求的参数,@RequestParam注解可以不写
2.对于接受post请求中的body参数,必须都写@RequestBody注解
(1)前端
var list = [];
list.push({
"username": "wdy",
"password": "123"
});
list.push({
"username": "wdy1",
"password": "345"
});
$.ajax({
url: "/test/listObject",
data: JSON.stringify(list),
type: "post",
contentType: "application/json",
dataType: "json",
success: function(data) {
}
});
@PostMapping("/listObject")
public Result map2(@RequestBody List users){
System.out.println(users);
return Result.success();
}
(4)说明
@PostMapping("/person")
public Result list(@RequestBody Person person){
System.out.println(person);
return Result.success();
}
@Data
public class Person {
private String name;
private List list;
private List userList;
}
7.1 前端
multipart/form-data
一般用于表单文件上传,必须让 form 的 enctype 等于这个值。
@PostMapping("/file/upload")
public Result upload(@RequestParam("file") MultipartFile file) {
return Result.success();
}
@RequestBody注解,必须与contentType 类型application/json配合使用。
@RequestParam注解,必须与contentTyp类型application/x-www-form-urlencoded配合使用,其为默认类型。
JSON.stringify()把对象类型转换为字符串类型,配合@RequestBody注解和contentType 类型application/json使用。
想要继续学习的童鞋可以关注小编哦,稍候更新~~
必看文章:
2.5万字详解Java 23种设计模式的简介和创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图、及代码演示
代码中如何干掉太多的if else即if else的多种替代方案以提高代码质量通过公司代码审查
Mysql执行顺序写sql不再是问题**!!**
想详细了解微服务与分布式的可以看小编这篇博客
微服务 分布式 集群 负载均衡详述
spring boot springcloud dubbo概述