SpringMVC中的表现层结果封装
准Java全栈开发工程师 人气:0一、为什么要将返回结果封装?
当前端发送一个请求,被处理后,我们之前的处理方式就是,对于增删改操作,我们返回 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)测试查询全部方法
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
加载全部内容