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

返回了统一响应结果

统一表现层的数据模式

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

小结

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

目录
相关文章
|
12天前
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
48465 9
|
13天前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
58 5
|
13天前
|
监控 前端开发 Java
SSMP整合案例第七步 前后端业务异常消息统一处理
SSMP整合案例第七步 前后端业务异常消息统一处理
13 1
|
2天前
|
JSON 数据格式
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
|
13天前
|
存储 Java 数据库连接
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展
11 0
|
13天前
|
SQL Java 数据库连接
SSMP整合案例第二步 数据层dao开发及实现特殊查询
SSMP整合案例第二步 数据层dao开发及实现特殊查询
9 0
|
16天前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
19 0
|
2月前
|
数据安全/隐私保护
若依框架---为什么把添加和更新分成两个接口
若依框架---为什么把添加和更新分成两个接口
74 0
|
9月前
|
XML Java 数据库
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(一)
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)
163 0
|
9月前
|
数据处理 数据安全/隐私保护
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)(二)
Flowable:关于流程部署、启动、处理、完成各模块的浅析(图解)
325 0