SSMP整合案例第四步 表现层controller开发及用Result进行统一消息处理

简介: SSMP整合案例第四步 表现层controller开发及用Result进行统一消息处理

表现层开发

数据层和业务层都做完了

我们首先得创建我们表现层对应的包和类

Controller层 控制层

先写的是查询所有信息

控制层调用业务层

使用的是依赖注入的方法

依赖注入(Dependency Injection,DI)是一种软件设计模式,用于实现对象之间的依赖关系管理。在依赖注入中,对象不再创建和管理它们依赖的对象,而是由外部系统(通常是依赖注入容器或者手动注入)来提供所需的依赖对象。这种方式有助于降低类之间的耦合度,并且提高了代码的可维护性、可测试性和可扩展性。

关键概念:

  1. 依赖:一个对象需要依赖于其他对象或者服务来完成特定的功能。依赖可以是其他类的实例、接口、或者其他外部资源。
  2. 注入:指定依赖关系的过程,即将依赖对象传递给需要它的对象。注入可以通过构造函数、属性或者方法来实现

优势:

  • 松耦合:降低类与类之间的依赖关系,使得修改一个类不会影响到其他类。
  • 可测试性:依赖可以通过 mock 或者 stub 对象来进行单元测试,而不需要实际依赖的真实实现。
  • 灵活性和可维护性:易于更换依赖的具体实现,使系统更加灵活和可维护。

注意事项:

  • 复杂性增加:依赖注入虽然有利于管理复杂的依赖关系,但也可能增加代码的复杂性,特别是在大型项目中。
  • 深层依赖管理:依赖注入容器需要适当地管理和配置依赖,避免过度复杂或者深层次的依赖嵌套。

依赖注入是现代软件开发中重要的设计原则之一,能够帮助开发者编写更具灵活性和可测试性的代码。

package com.bigdata1421.ssmp.controller;
 
import com.bigdata1421.ssmp.domain.User;
import com.bigdata1421.ssmp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.List;
 
@RestController
@RequestMapping("/users")
public class UserController {
    //注入业务层
    @Autowired
    private UserService userService;
 
    //规定请求方式
    @GetMapping
    public List<User> getAll(){
        return userService.geTAll();
    }
 
    @PostMapping
    public Boolean save(@RequestBody User user){
        return userService.save(user);
    }
 
    @PutMapping
    public Boolean update(@RequestBody User user){
        return userService.update(user);
    }
 
    @DeleteMapping("{id}")
    public Boolean delete(@PathVariable Integer id){
        return userService.delete(id);
    }
 
    @GetMapping("{id}")
    public  User getById(@PathVariable Integer id){
        return userService.getById(id);
    }
 
}

post是更新数据,put是替换数据

改写

我们通过save update异步提交发送的话参数是通过请求体传json数据过来

@RequestBody注解 代表请求体参数

删除和查单个 我们一般是传单个参数过来

我们使用路径参数传参

用postman发起请求

对应的语句

数据库中已经成功写入数据

查看一下全部

试一下查看刚才添加的数据

查看一下

删掉

这样就删掉了

回顾一下

设置公共的请求路径前缀 users

之后用postman测试数据

完善分页查询

在接口里添加方法

接口的实现类重写接口的方法

在控制层书写代码

用postman测试接口

发送请求

总结

表现层消息统一处理

但是我们返回给前端的数据

有各种各样的

比如说json数组 json 布尔类型的数值

我们得想办法和前端配合在一起工作

我们要修改数据

用data封装数据

但是还是要处理null

查询id

不存在 返回的是null

查询过程中抛出异常 catch中返回null

所以我们要告诉前端人员我们查询成功还是失败

前后端数据协议

就是为了后端发送给前端时数据统一

协议联调

定义Result类 R类

package com.bigdata1421.ssmp.controller.utils;
 
import lombok.Data;
 
@Data
public class Result {
    private Boolean flag;
    private Object data;
    public Result(){};
    public Result(Boolean flag){
        this.flag=flag;
    }
    public Result(Boolean flag,Object data){
        this.flag=flag;
        this.data=data;
    }
 
}

修改控制层的实现类

先把返回值类型都换成Result

先书写带参构造 无参构造

因为一般的话

接收的参数的是boolean 然后数据是null

改写

在书写其他的构造方法

然后去改

package com.bigdata1421.ssmp.controller;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bigdata1421.ssmp.controller.utils.Result;
import com.bigdata1421.ssmp.domain.User;
import com.bigdata1421.ssmp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.List;
 
@RestController
@RequestMapping("/users")
public class UserController {
    //注入业务层
    @Autowired
    private UserService userService;
 
    //规定请求方式
    @GetMapping
    public List<User> getAll(){
        return userService.geTAll();
    }
 
    @PostMapping
    public Result save(@RequestBody User user){
        return new Result(userService.save(user));
    }
 
    @PutMapping
    public Result update(@RequestBody User user){
        return new Result(userService.update(user));
    }
 
    @DeleteMapping("{id}")
    public Result delete(@PathVariable Integer id){
        return new Result(true,userService.delete(id));
    }
 
    @GetMapping("{id}")
    public  Result getById(@PathVariable Integer id){
        return new Result(true,userService.getById(id));
    }
 
    @GetMapping("{currentPage}/{pageSize}")
    public Result getPage(@PathVariable int currentPage ,@PathVariable int pageSize){
        return new Result(true,userService.getPage(currentPage,pageSize));
    }
 
}

运行后 我们还是通过postman去测试

返回了统一响应结果

统一表现层的数据模式

设计表现层的返回结果数据模型

小结

这是后端到前端的数据协议

目录
相关文章
|
3月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
337 24
|
4月前
|
JSON 前端开发 Java
SpringBoot3怎么做统一结果封装?
在Spring Boot应用中,统一结果封装有助于团队协作,确保一致的API响应格式,提升代码质量和维护性。主要优点包括:简化前端集成工作,减少后端重复编码,以及增强接口的可维护性。实现上,首先定义`Result`类来封装响应状态码、消息、数据及时间戳;其次,通过`ResultCode`枚举类标准化状态信息。示例代码展示了如何构建这些类,并通过一个简单的控制器方法演示了如何使用它们返回JSON格式的响应结果。
181 2
|
6月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
124 5
|
6月前
|
监控 前端开发 Java
SSMP整合案例第七步 前后端业务异常消息统一处理
SSMP整合案例第七步 前后端业务异常消息统一处理
43 1
|
5月前
|
JSON 数据格式
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
|
6月前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
45 0
|
6月前
|
SQL 前端开发 API
SSMP整合案例第一步 制作分析模块创建与开发业务实体类
SSMP整合案例第一步 制作分析模块创建与开发业务实体类
36 0
|
6月前
|
SQL Java 数据库连接
SSMP整合案例第二步 数据层dao开发及实现特殊查询
SSMP整合案例第二步 数据层dao开发及实现特殊查询
33 0
|
缓存 Kubernetes 搜索推荐
k8s自定义controller三部曲之三:编写controller代码
本文是《k8s自定义controller三部曲》的终篇,编写controller的代码,通过监听API对象的增删改变化做出业务方面的响应
1210 0
k8s自定义controller三部曲之三:编写controller代码
|
JSON NoSQL 前端开发
SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件
SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件
SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件