一、前言

随着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 前端
(1)第一种

 window.location = '/test/get/1';

(2)第二种Ajax

$.ajax({
        url: '/test/get/1',
        type: 'get',
        dataType: 'json',
        success: function (result) {
        }
})

1.2 postman
在这里插入图片描述
1.3 后端代码

@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、不带参数路径访问

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) {
        }
})

2.2 postman
在这里插入图片描述
2.3 后端代码

    @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、list或者数组接受参数

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<Long> 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<Long> 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、map或者实体类接受参数

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

get请求
在这里插入图片描述
post请求
在这里插入图片描述
4.3 后端

	@GetMapping("/map")
    public Result map(@RequestParam Map<String,Object> 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<String,Object> 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注解

5、 集合实体对象接受参数

(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) {
    }
});

(2) postman
在这里插入图片描述
(3)后端

@PostMapping("/listObject")
    public Result map2(@RequestBody List<User> users){
        System.out.println(users);
        return Result.success();
    }

(4)说明

6、复杂对象接受参数

6.1 postman
在这里插入图片描述
6.2 后端

   @PostMapping("/person")
    public Result list(@RequestBody Person person){
        System.out.println(person);
        return Result.success();
    }
    
	@Data
	public class Person {	
    	private String name;
    	private List<Long> list;
    	private List<User> userList;
	}

7、文件上传

7.1 前端
multipart/form-data
一般用于表单文件上传,必须让 form 的 enctype 等于这个值。

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="text" name="description" value="爪哇笔记,一个神奇的公众号">
  <input type="file" name="myFile">
  <button type="submit">Submit</button>
</form>

7.2 postman
在这里插入图片描述
7.3 后端

	@PostMapping("/file/upload")
    public Result upload(@RequestParam("file") MultipartFile file) {
	    return Result.success();
    }

8、总结

@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概述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐