在Controller中加入@RestController
,效果等于@Controller
+ @ResponseBody
。
1 请求路径参数
直接把表单里面的参数写进 Controller 相应方法的形参中去,这个获取参数的方法适合get提交,而不适合post提交。
@PathVariable
获取(这个当然不分get和post了,是url提取嘛)
@RequestMapping("/userInfo/{id}")
public String userInfo(@PathVariable String id) {
System.out.println(id);
return id;
}
http://localhost:8080/userInfo/142857
@RequestParam
获取查询参数,如url?id=1428571
- 当请求参数名与方法形参变量名相同时,可不加
@RequestParam
注解 @RequestParam
注解的required属性默认为true,若参数不是必须传递需改为false
- 当请求参数名与方法形参变量名相同时,可不加
@RequestMapping("/userInfo")
public String userInfo(@RequestParam(name = "id") String id) {
System.out.println(id);
return id;
}
http://localhost:8080/userInfo?id=12345671
2 实体参数
通过建立一个bean
来获取参数:
package com.example.helloworld.model;
public class User {
private String id;
private String name;
private Notebook notebook;
User(String id, String name) {
this.id = id;
this.name = name;
this.notebook = new Notebook();
}
public String getName() {
return name;
}
}
@RequestMapping("/userInfo")
public String userInfo(User user) {
System.out.println(user.getName());
return user.getName();
}
http://localhost:8080/userInfo?id=12345671&name=xiaokou
3 日期参数
http://localhost:8080/problemBook?id=142857&time=2022-01-01 00:00:00
@RequestMapping("/problemBook")
public String problemBook(String id, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
System.out.println(id);
System.out.println(time);
return "OK";
}
但“yyyy-MM-dd”就识别有问题……
4 Json Body参数
通常用于Post请求。
使用RequestBody
注解。
@PostMapping("/finishProblem")
public String finishProblem(@RequestBody User user) {
System.out.println(user.getName());
return "OK";
}
也可以使用一个map接收:
@PostMapping("/finishProblem")
public String finishProblem(@RequestBody Map<String, String> params) {
System.out.println(params.get("uid"));
System.out.println(params.get("problemId"));
return "OK";
}
5 返回结果
@ResponseBody
用于Controller类或者方法上,将方法返回值直接响应,若返回值类型是实体对象或者集合,将转为json格式相应。
为了有统一的返回方式,定义统一响应结果Result
。
package com.example.helloworld.controller;
/**
* code response状态码
* obj 返回给前端的数据
* message 附加信息,说明具体情况
*/
public class Result {
public int code;
public String message;
public Object data;
public Result(int code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
public static Result success(Object data) {
return new Result(200, "success", data);
}
public static Result success() {
return new Result(200, "success", null);
}
public static Result error(String message) {
return new Result(404, message, null);
}
}