开发者

SpringMVC中的表现层结果封装

开发者 https://www.devze.com 2022-11-28 13:38 出处:网络 作者: 准Java全栈开发工程师
目录一、为什么要将返回结果封装?二、封装步骤1、自定义封装类2、编写Code类统一状态码三、案例演示1、需求分析2、编写UserController类3、使用Postman工具测试一、为什...
目录
  • 一、为什么要将返回结果封装?
  • 二、封装步骤
    • 1、自定义封装类
    • 2、编写 Code 类统一状态码
  • 三、案例演示
    • 1、需求分析android
    • 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;
    }
}

因为是将表现层android方法的返回结果进行封装,所以可以将 Result 封装类定义在 controller 包中。

  • co编程客栈de属性存储请求操作是否成功处理,使用统一开发者_C教程的格式。
  • 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;
    pubphplic static final Integer BUSINESS_ERR = 60002;
}

将状态码定义为常量,在需要是可以直接调用使用。以上仅列举了一些常用的状态码,需要什么,都可以自己定义。

三、案例演示

1、需求分析

  • 完成对 user 表的增删改、根据ID查、查询全部操作。
  • 实体类、数据访问层、业务逻辑层代码在此就不再展示了,就是非常普通的增删改查操作,重点介绍如何对返回结果封装。

2、编写 UserController 类

@RestControljsler
@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 方法

SpringMVC中的表现层结果封装

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

2)测试 update 方法

SpringMVC中的表现层结果封装

3)测试 delete 方法

SpringMVC中的表现层结果封装

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

4)测试 selectById 方法

SpringMVC中的表现层结果封装

对于查询操作,如果成功查询到了数据,就会将数据放到 data 中。

5)测试查询全部方法

SpringMVC中的表现层结果封装

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号