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去测试

返回了统一响应结果

统一表现层的数据模式

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

小结

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

目录
相关文章
|
7月前
|
设计模式 存储 前端开发
MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的输入逻辑、业务逻辑和用户界面逻辑分离
【6月更文挑战第17天】**MVC模式**是软件设计模式,用于分离输入逻辑、业务逻辑和用户界面。模型处理数据和业务,视图展示数据,控制器协调两者响应用户请求。优点包括:关注点分离、提高开发效率、简化测试、支持多视图及便于大型项目管理。
63 3
|
5月前
|
JSON 前端开发 Java
SpringBoot3怎么做统一结果封装?
在Spring Boot应用中,统一结果封装有助于团队协作,确保一致的API响应格式,提升代码质量和维护性。主要优点包括:简化前端集成工作,减少后端重复编码,以及增强接口的可维护性。实现上,首先定义`Result`类来封装响应状态码、消息、数据及时间戳;其次,通过`ResultCode`枚举类标准化状态信息。示例代码展示了如何构建这些类,并通过一个简单的控制器方法演示了如何使用它们返回JSON格式的响应结果。
197 2
|
7月前
|
监控 前端开发 Java
SSMP整合案例第七步 前后端业务异常消息统一处理
SSMP整合案例第七步 前后端业务异常消息统一处理
44 1
|
6月前
|
JSON 数据格式
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
|
7月前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
49 0
|
7月前
|
SQL 前端开发 API
SSMP整合案例第一步 制作分析模块创建与开发业务实体类
SSMP整合案例第一步 制作分析模块创建与开发业务实体类
40 0
|
7月前
|
SQL Java 数据库连接
SSMP整合案例第二步 数据层dao开发及实现特殊查询
SSMP整合案例第二步 数据层dao开发及实现特殊查询
36 0
|
7月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
247 0
|
8月前
|
移动开发 前端开发
基于若依的ruoyi-nbcio流程管理系统基于form-generator的表单设计器增加子表单的一种简单方法(一)
基于若依的ruoyi-nbcio流程管理系统基于form-generator的表单设计器增加子表单的一种简单方法(一)
112 0
|
8月前
|
XML JSON Java
SpringMVC原理分析 | Controller配置、RestFul风格
SpringMVC原理分析 | Controller配置、RestFul风格
89 0

热门文章

最新文章