SpringMVC中的表现层结果封装
目录
- 一、为什么要将返回结果封装?
- 二、封装步骤
- 1、自定义封装类
- 2、编写 Code 类统一状态码
- 三、案例演示
- 1、需求分析
- 2、编写 UserController 类
- 3、使用 Postman 工具测试
一、为什么要将返回结果封装?
当前端发送一个请求,被处理后,我们之前的处理方式就是,对于增删改操作,我们返回 true 或 false;对于查询操作,我们就将查询后的结果返回。
虽然使用该方式能够将请求结果返回,但是前端开发人员在解析返回的数据时就会非常麻烦,他们需要根据你不同的返回结果定义不同的解析方法,造成了巨大的工作量。
如果双方之间能够定义一种方式,每次后端开发人员在返回数据时都返回指定格式的数据,那么前端开发人员在解析数据时也就非常的方便迅速,这就使得在开发项目的过程中,不会因为这些无关紧要的问题而耗费大量的时间。
二、封装步骤
1、自定义封装类
public class Result {
private Integer code;
private Object data;
private String msg;
public Result() {
}
public Result(Integer code, Object data) {
this.code = code;
this.data = data;
}
public Result(Integer code, Object data, String msg) {
this.code = code;
this.data = data;
this.msg = msg;
}
}
因为是将表现层方法的返回结果进行封装,所以可以将 Result 封装类定义在 controller 包中。
code属性存储请求操作是否成功处理,使用统一的格式。data属性存储请求操作成功处理后得到的数据。msg属性存储一些提示信息,主要是请求处理失败时的提示信息。
当然,封装类中还可以根据需要定义一些其他属性,并不是说一定是这三种。
2、编写 Code 类统一状态码
public class Code {
public static final Integer INSERT_OK = 20011;
public static final Integer DELETE_OK = 20021;
public static final Integer UPDATE_OK = 20031;
public static final Integer SELECT_OK = 20041;
public static final Integer INSERT_ERR = 20010;
public static final Integer DELETE_ERR = 20020;
public static final Integer UPDATE_ERR = 20030;
public static final Integer SELECT_ERR = 20040;
public static final Integer SYSTEM_ERR = 50001;
public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
public static final Integer SYSTEM_UNKNOW_ERR = 59999;
public static final Integer BUSINESS_ERR = 60002;
}
将状态码定义为常量,在需要是可以直接调用使用。以上仅列举了一些常用的状态码,需要什么,都可以自己定义。
三、案例演示
1、需求分析
- 完成对 user 表的增删改、根据ID查、查询全部操作。
- 实体类、数据访问层、业务逻辑层代码在此就不再展示了,就是非常普通的增删改查操作,重点介绍如何对返回结果封装。
2、编写 UserController 类
@RestController
@RequestMapping("users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public Result insert(@RequestBody User user) {
boolean insert = userService.insert(user);
return new Result(insert ? Code.: Code.INSERT_ERR,insert);
}
@PutMapping
public Result update(@RequestBody User user) {
boolean update = userService.update(user);
return new Result(update ? Code.UPDATE_OK : Code.UPDATE_ERR,update);
}
@DeleteMapping("/{id}")
public Result delete(@PathVariable Integer id) {
boolean delete = userService.delete(id);
return new Result(delete ? Code.DELETE_OK : Code.DELETE_ERR,delete);
}
@GetMapping("/{id}")
public Result selectById(@PathVariable Integer id) {
User user = userService.selectById(id);
Integer code = user != null ? Code.SELECT_OK : Code.SELECT_ERR;
String msg = user != null ? "" : "查询结果不存在,请重试!";
return new Result(code,user,msg);
}
@GetMapping
public Result selectAll() {
List<User> userList = userService.selectAll();
Integer code = userList != null ? Code.SELECT_OK : Code.SELECT_ERR;
String msg = userList != null ? "" : "查询结果不存在,请重试!";
return new Result(code,userList,msg);
}
}
采用 REST 风格编写。
仔细查看后会发现,其实和我们之前写的方法并没有什么太大的区别,无非就是将返回值改为了 Result 类型,返回的不单单是 data 数据,又多传递了 code 和 msg 值而已。
虽然仅有小的改变,但是却大大的加快了项目的开发效率,给前后端开发人员减少了不少麻烦。
3、使用 Postman 工具测试
1)测试 insert 方法

code值为 20011 表示 insert 新增操作成功执行。data返回了 true,同样说明已经成功执行了 insert 操作。msg为空则表示没有提示信息,一般在错误情况下才会刻意写一些提示信息。
2)测试 update 方法

3)测试 delete 方法

根据返回结果,能够很清晰的知道删除操作并没有成功执行。这是因为数据库表中并没有 id = 3 的数据,所以删除操作没能成功执行。
4)测试 selectById 方法

对于查询操作,如果成功查询到了数据,就会将数据放到 data 中。
5)测试查询全部方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
赞 (0)
