SpringMVC中的表现层结果封装

 更新时间:2022年11月16日 09:13:25   作者:准Java全栈开发工程师  
这篇文章主要介绍了SpringMVC中的表现层结果封装,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

一、为什么要将返回结果封装?

当前端发送一个请求,被处理后,我们之前的处理方式就是,对于增删改操作,我们返回 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)测试查询全部方法

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

相关文章

  • Springboot详解底层启动过程

    Springboot详解底层启动过程

    这篇文章主要介绍了SpringBoot启动过程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java实现自定义时钟并实现走时功能

    java实现自定义时钟并实现走时功能

    这篇文章主要为大家详细介绍了java实现自定义时钟并实现走时功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Visual Studio Code配置Tomcat运行Java Web项目详细步骤

    Visual Studio Code配置Tomcat运行Java Web项目详细步骤

    VS Code是一款非常棒的文本编辑器,具有配置简单、功能丰富、轻量简洁的特点,并且极其适合处理中小规模的代码,这篇文章主要给大家介绍了关于Visual Studio Code配置Tomcat运行Java Web项目的详细步骤,需要的朋友可以参考下
    2023-11-11
  • Java纯代码实现导出文件为压缩包

    Java纯代码实现导出文件为压缩包

    这篇文章主要为大家详细介绍了Java如何代码实现导出文件为压缩包,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • zookeeper服务优化的一些建议

    zookeeper服务优化的一些建议

    今天小编就为大家分享一篇关于zookeeper服务优化的一些建议,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Java实现批量导出导入数据及附件文件zip包

    Java实现批量导出导入数据及附件文件zip包

    这篇文章主要为大家详细介绍了Java实现批量导出导入数据及附件文件zip包的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一
    2022-09-09
  • 学习Java内存模型JMM心得

    学习Java内存模型JMM心得

    这篇文章主要介绍了学习Java内存模型JMM的心得以及对其原理做了深入的介绍,有兴趣的朋友学习下吧。
    2017-12-12
  • spring整合redis以及使用RedisTemplate的方法

    spring整合redis以及使用RedisTemplate的方法

    本篇文章主要介绍了spring整合redis以及使用RedisTemplate的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • package打包一个springcloud项目的某个微服务报错问题

    package打包一个springcloud项目的某个微服务报错问题

    这篇文章主要介绍了package打包一个springcloud项目的某个微服务报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java常用集合与映射的线程安全问题小结

    Java常用集合与映射的线程安全问题小结

    本文给大家介绍Java常用集合与映射的线程安全问题小结,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-04-04

最新评论