Controller

注解

@RestController 相当于 @Controller + @ResponseBody

@Controller 标注为 Controller

1
2
3
4

@RestController
public class SimpleParamController {
}

RequestMapping 请求与响应处理

1
2
3
4
5
6
7
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}

注解的属性:

  • 默认 value
    • url
  • method
    • 限制请求方式
      • RequestMethod.GET

Mapping 衍生注解

1
2
3
4
@GetMapping("/url")
@PostMapping("/url")
@PutMapping("/url")
@DeleteMapping("/url")

公共路径可提取到类上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

@RestController
@RequestMapping("/depts")
public class DeptController {

@Autowired
private DeptService deptService;

@GetMapping
public Result list() {
List<Dept> deptList = deptService.list();
return Result.success(deptList);
}

@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id) {
deptService.delete(id);
return Result.success();
}

@PostMapping
public Result delete(@RequestBody Dept dept) {
deptService.add(dept);
return Result.success();
}
}

请求接收

原始方式获取参数

1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class SimpleParamController {
@RequestMapping("/simpleParam")
public String simpleParam(HttpServletRequest request) {
// 获取请求参数
String name = request.getParameter("name");
String ageStr = request.getParameter("age");

int age = Integer.parseInt(ageStr);
System.out.println(name + ":" + age);
return "OK";
}
}

简单参数

请求参数名与函数的参数名相同

1
2
3
4
5
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age) {
System.out.println(name + ":" + age);
return "OK";
}

@RequestParam 请求参数处理(限制、映射、默认值)

name属性,映射参数名

如果参数名未对应上,值为null,但不报错

@RequestParam(name="") 映射参数名,使用属性name或 value都可以

1
2
3
4
5
6
7
8
@RequestMapping("/simpleParam")
public String simpleParam(
@RequestParam(name="name")String username,
Integer age
) {
System.out.println(name + ":" + age);
return "OK";
}

@RequestParam 有一个默认属性 required=turn ,不传入参数会报错

defaultValue ,设置默认值

annotation属性值类型为字符串,最后会自行转换为参数类型

路径参数 @PathVariable

注解 @PathVariable 获取路径参数, 路径中用 {参数名} 标注参数

1
2
3
4
5
@RequestMapping("/pathParam/{id}")
public String pathParam(@PathVariable Integer id) {
System.out.println(id);
return "OK";
}

Mapping的SQL annotation处:

1
"#{paraName}"

JSON 参数 @RequestBody

用 实体对象 接收参数:
键名于对象名保持一致,嵌套的也是如此

注解 @RequestBody 解析JSON

1
2
3
4
5
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
System.out.println(user);
return "OK";
}

日期参数

1
2
3
4
5
6

@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updataTime) {
System.out.println(updataTime);
return "OK";
}

注解 @DateTimeFormat 指定日期参数格式

文件接收

对象 MultipartFile 多文件处理

配置:

常见方法:

前端发送的响应类型:multipart/form-data

响应

String

1
2
3
4
5
@RequestMapping
public String hello(){
System.out.println("Hello, World ~");
return "Hello, World ~";
}

直接响应字符串

响应对象,处理为JSON @ResponseBody

@ResponseBody 响应数据,返回的数据(对象)转换为 JSON 数据,发送给前端

如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

1
2
3
4
5
6
7
@RequestMapping("/getAddr")
public Address getAddr() {
Address addr = new Address();
addr.setProvince("广东");
addr.setCity("深圳");
return addr;
}

转换成 JSON 后返回:

1
{"province":"广东","city":"深圳"}

列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RequestMapping("/listAddr")
public List<Address> listAddr() {
List<Address> list = new ArrayList<>();

Address addr = new Address();
addr.setProvince("广东");
addr.setCity("深圳");

Address addr2 = new Address();
addr2.setProvince("广西");
addr2.setCity("北海");

list.add(addr);
list.add(addr2);
return list;
}

返回 JSON ,最外层是数组:

1
[{"province":"广东","city":"深圳"},{"province":"广西","city":"北海"}]

统一响应结果

响应数据包装成一个 Result 类,以此统一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Result {
// 响应码,1 成功, 0 失败
private Integer code;
// 提示信息
private String msg;
// 返回的数据
private Object data;

// 无参构造器 有参构造器

// Getter and Setter

// 可以写 一些静态方法 方便快速创建 Result 对象
}

返回:

1
2
3
4
5
{
"code":1,
"msg":"操作成功",
"data":...
}