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)

相关推荐

  • SpringMVC整合SSM实现表现层数据封装详解

    目录 SSM整合配置 SSM整合流程 Spring整合Mybatis Spring整合SpringMVC 功能模块开发 接口测试 表现层数据封装(前后端通信协议) 表现层响应数据的问题 定义Result类封装响应结果 表现层数据封装返回Result对象 SSM整合配置 SSM整合流程 1.创建工程 2.SSM整合 Spring SpringConfig MyBatis MybatisConfig JdbcConfig jdbc.properties SpringMVC ServletConfig

  • springmvc数据的封装过程详解

    spring封装是进行orm封装,可以进行定义数据类型,数据名与接收名相同,进行接收,或者定义类,类的属性名与接收名相同 单个数据类型如图下: 对象类型封装: 其他:乱码处理 在中文字符乱码,需要规定请求响应的编码,可以自己进行过滤器进行过滤设置,但是jar包中给我们提供了此过滤器,我们只需要进行web.xml配置即可 init-param规定的是编译的类型 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • Java SSM整合开发统一结果封装详解

    目录 表现层与前端数据传输协议定义 表现层与前端数据传输协议实现 结果封装 表现层与前端数据传输协议定义 SSM整合以及功能模块开发完成后,接下来,我们在上述案例的基础上分析下有哪些问题需要我们去解决下.首先第一个问题是: 在Controller层增删改返回给前端的是boolean类型数据 在Controller层查询单个返回给前端的是对象 在Controller层查询所有返回给前端的是集合对象 目前我们就已经有三种数据类型返回给前端,如果随着业务的增长,我们需要返回的数据类型会越来越多.对于前

  • SpringMVC中的表现层结果封装

    目录 一.为什么要将返回结果封装? 二.封装步骤 1.自定义封装类 2.编写 Code 类统一状态码 三.案例演示 1.需求分析 2.编写 UserController 类 3.使用 Postman 工具测试 一.为什么要将返回结果封装? 当前端发送一个请求,被处理后,我们之前的处理方式就是,对于增删改操作,我们返回 true 或 false:对于查询操作,我们就将查询后的结果返回. 虽然使用该方式能够将请求结果返回,但是前端开发人员在解析返回的数据时就会非常麻烦,他们需要根据你不同的返回结果定

  • SpringMVC中事务是否可以加在Controller层的问题

    目录 SpringMVC中事务是否可以加在Controller层 Spring在Controller层的事务操作 以下是代码 SpringMVC中事务是否可以加在Controller层 一般而言,事务都是加在Service层的,但是爱钻牛角尖的我时常想:事务加在Controller层可不可以. 我一直试图证明事务不止可以加在Service层,还可以加在Controller层,但是没有找到有力的论据来支持我这个想法,搞得我一度认为事务只能加在Service层,直到我读过spring官方文档并实践之

  • SpringMVC中常用注解与使用方法详解

    MVC简介 MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计创建 Web 应用程序表现层的模式. Model(模型): 通常指的就是我们的数据模型.作用一般情况下用于封装数据. View(视图): 通常指的就是我们的 jsp 或者 html.作用一般就是展示数据的. 通常视图是依据模型数据创建的. Controller(控制器): 是应用程序中处理用户交互的部分.作用一般就是处理程序逻辑的.

  • spring springMVC中常用注解解析

    一,使用注解: 在spring的配置文件applicationContext.xml中,加入注解扫描.配置项就配置了对指定的包进行扫描,以实现依赖注入. <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans&q

  • SpringMVC中常用参数校验类注解使用示例教程

    目录 一.环境准备 二.常用的校验注解及示例 三.校验类方法中的普通参数 四.校验类方法中的自定义对象 五.关于@Valid和@Validated的区别联系 六.分组校验 七.自定义校验注解 一.环境准备 在项目中添加以下依赖 gradle org.hibernate:hibernate-validator:5.3.5.Final maven <dependency> <groupId>org.hibernate</groupId> <artifactId>

  • 详解SpringMVC中使用Interceptor拦截器

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间.  一.定义Interceptor实现类 SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方式是要定义的Interce

  • 详解springmvc 中controller与jsp传值

    在springmvc中的controller所对应的函数中,如果需要从*.jsp页面中获取数据,可以自行在函数括号中写,springmvc会自动封装传过来的值. spring-mvc.xml 中加入如下语句: <!-- 自动扫描 --> <context:component-scan base-package="cn.itcast.springmvc.service,cn.itcast.springmvc.web.controller"/> <!-- 注解

  • 如何将mybatis配置到springmvc中

    MyBatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 为了更方便的连接数据库,将mybatis配置到springMVC中 1).  首先是jar包    多了3个jar  dr

  • jQuery+SpringMVC中的复选框选择与传值实例

    一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked"); $("#cb1").attr("checked",true); 对应的jQuery函数,主要完成三个功能: 1.第一个复选框选中或取消选中,则下面的复选框为全选或取消全选: 2.当下面的复选框全部选中时,则将第一个复选框设置为选中,当下面的复选框中有一个

  • 浅谈Springmvc中的页面跳转问题

    SpringMvc跳转问题 SpringMvc的Controller每次处理完数据后都会返回一个逻辑视图(view)和模型(model) 所以我们会看到原生的Controller是返回一个ModelAndView(内部包含了view和model). 正常情况下(除非被@ModelAttribute注解了的方法),否则最终都会返回ModelAndView. 当然有时候一个功能处理方法不一定要返回一个逻辑视图,也可以重定向到另一个功能方法 服务器内部转发到一个逻辑视图或者另一个功能方法. --- S

随机推荐