在我们实际开发中,经常用@Restcontroller来写接口返回结果给前端,为了前后端人员的合作我们一般会把返回的结果统一规范为一个样子,这样方便前后端的合作,不然你的前端会上来找你算账的。
案例
封装后的结果这样呈现:
{
"code": "xxx",
"msg": "xxx",
"data": {
"xxx"
}
}
- 我们用一个接口来封装状态码(具体多少为什么意思可以自己定义):
package com.hyq.common;
public interface Constants {
String CODE_200 = "200"; // 成功
String CODE_401 = "401"; // 权限不足
String CODE_400 = "400"; // 参数不足
String CODE_500 = "500"; // 系统错误
String CODE_600 = "600"; // 其他业务异常
}
- 新建一个封装结果的类(里面的构造器可以自己调节):
package com.hyq.common;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
private String code;
private String msg;
private Object data;
public static Result success(){
return new Result(Constants.CODE_200, "", null);
}
public static Result success(Object data){
return new Result(Constants.CODE_200, "", data);
}
public static Result error(String code, String msg){
return new Result(code, msg, null);
}
public static Result error() {
return new Result(Constants.CODE_500, "系统错误", null);
}
}
- 将controller层返回类型换为Result 类型(这里是一个利用MP写的简单CUDR):
package com.hyq.controller;
import com.hyq.common.Result;
import com.hyq.pojo.User;
import com.hyq.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author hyq
* @since 2023-03-24
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
/*
* 简单增删改查
* */
//新增或者更新
@PostMapping
public Result save(@RequestBody User user){
return Result.success(userService.saveOrUpdate(user));
}
//删除
@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id){
return Result.success(userService.removeById(id));
}
//通过id查询
@GetMapping("/{id}")
public Result findOne(@PathVariable Integer id){
return Result.success(userService.getById(id));
}
//查所有
@GetMapping
private Result findAll() {
return Result.success(userService.list());
}
}
测试结果(我们在结果封装中定义了一个Object的data参数,所有直接将得到的结果丢到这个里面就可以啦,这样前端也好获取数据,再者加上了状态码好辩析成功与失败):
{
"code": "200",
"msg": "",
"data": [
{
"id": 2,
"username": "admin",
"password": "123",
"nickname": "hyq",
"gmtCreate": "2023-03-24T14:24:27",
"gmtModifie": "2023-03-24T14:25:30"
},
{
"id": 8,
"username": "user1",
"password": "qwe",
"nickname": "aaa",
"gmtCreate": "2023-03-24T19:26:59",
"gmtModifie": "2023-03-24T19:29:30"
},
{
"id": 9,
"username": "user2",
"password": "zxc",
"nickname": "df",
"gmtCreate": "2023-03-24T19:29:30",
"gmtModifie": "2023-03-24T19:29:30"
}
]
}