山东大学软件学院创新实训----后端开发11 BaseController 设计与实现

简介:

在智慧医疗系统中,各个模块通常需要实现对不同实体的管理,例如用户、疾病种类、药品信息等。为了避免重复编写相似的增删改查代码,并保证代码的一致性和可维护性,我们设计了一个通用的基础控制器 BaseController。该控制器通过泛型支持不同类型的实体对象,利用依赖注入和通用的服务层方法,提供了标准的保存、删除等操作,同时处理了请求、响应和会话管理等常见问题。

实现内容:

1、save 方法用于保存传入的对象 obj,并调用通用的服务层方法 service.save(obj) 完成保存操作。在保存成功或失败后,返回相应的响应结果。

@ResponseBody
@PostMapping("save")
public RespResult save(T obj) {
    if (Assert.isEmpty(obj)) {
        return RespResult.fail("保存对象不能为空");
    }
    obj = service.save(obj);
    return RespResult.success("保存成功", obj);
}

2、delete 方法用于根据传入的主键 ID 删除对象。在删除前会检查 ID 的有效性,如果删除成功则返回成功的响应,否则返回失败或数据不存在的响应。

@ResponseBody
@PostMapping("/delete")
public RespResult delete(Integer id) {
    if (Assert.isEmpty(id)) {
        return RespResult.fail("删除ID不能为空");
    }
    if (service.delete(id) == 0) {
        T t = service.get(id);
        if (Assert.isEmpty(t)) {
            return RespResult.notFound("数据不存在");
        }
        return RespResult.fail("删除失败");
    }
    return RespResult.success("删除成功");
}

3、setReqAndRes 方法用于在每个子类方法调用之前设置请求、响应和会话对象,以及当前登录用户和疾病种类列表等常用信息,方便后续方法调用时使用。

@ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
    this.request = request;
    this.response = response;
    this.session = request.getSession(true);
    loginUser = (User) session.getAttribute("loginUser");
    session.setAttribute("kindList", illnessKindService.findList());
}

完整实现代码:

package com.SmartMed_Connect.controller;

import com.SmartMed_Connect.dto.RespResult;
import com.SmartMed_Connect.entity.IllnessKind;
import com.SmartMed_Connect.entity.User;
import com.SmartMed_Connect.service.*;
import com.SmartMed_Connect.utils.Assert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.SmartMed_Connect.component.EmailClient;
import com.SmartMed_Connect.service.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
 * BaseController 类为其他控制器类提供基础功能,包含常用的服务和处理请求、响应、会话的常用操作。
 *
 * @param <T> 泛型类型,用于支持不同的实体类型
 */
public class BaseController<T> {
    // 自动注入常用服务对象,提供业务逻辑处理
    @Autowired
    protected ApiService apiService;
    @Autowired
    protected UserService userService;
    @Autowired
    protected IllnessKindService illnessKindService;
    @Autowired
    protected IllnessMedicineService illnessMedicineService;
    @Autowired
    protected IllnessService illnessService;
    @Autowired
    protected MedicalNewsService medicalNewsService;
    @Autowired
    protected MedicineService medicineService;
    @Autowired
    protected HistoryService historyService;
    @Autowired
    protected FeedbackService feedbackService;

    // 自动注入通用的基础服务对象,处理泛型类型的实体对象
    @Autowired
    protected BaseService<T> service;

    // 自动注入EmailClient对象,用于发送邮件
    @Autowired
    protected EmailClient emailClient;

    // 定义用于处理请求、响应和会话的对象
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    protected HttpSession session;
    protected User loginUser;
    protected List<IllnessKind> kindList;

    /**
     * 保存、修改
     *
     * @param obj 目标对象
     * @return 响应结果
     */
    @ResponseBody//将控制器方法的返回值直接写入 HTTP 响应体中,而不是将其解析为一个视图名称。
    @PostMapping("save")
    public RespResult save(T obj) {
        // 检查对象是否为空
        if (Assert.isEmpty(obj)) {
            return RespResult.fail("保存对象不能为空");
        }
        // 调用服务层的保存方法保存对象
        obj = service.save(obj);
        // 返回保存成功的响应结果
        return RespResult.success("保存成功", obj);
    }

    /**
     * 删除
     *
     * @param id 主键ID
     * @return 响应结果
     */
    @ResponseBody
    @PostMapping("/delete")
    public RespResult delete(Integer id) {
        // 检查ID是否为空
        if (Assert.isEmpty(id)) {
            return RespResult.fail("删除ID不能为空");
        }
        // 调用服务层的删除方法删除对象
        if (service.delete(id) == 0) {
            T t = service.get(id);
            // 检查对象是否存在
            if (Assert.isEmpty(t)) {
                return RespResult.notFound("数据不存在");
            }
            return RespResult.fail("删除失败");
        }
        // 返回删除成功的响应结果
        return RespResult.success("删除成功");
    }

    /**
     * 在每个子类方法调用之前先调用
     * @param request  HTTP 请求对象,包含请求的相关信息
     * @param response HTTP 响应对象,包含响应的相关信息
     */
    @ModelAttribute
    public void setReqAndRes(HttpServletRequest request, HttpServletResponse response) {
        // 将传入的请求对象赋值给当前类的 request 属性,以便在其他方法中使用
        this.request = request;
        // 将传入的响应对象赋值给当前类的 response 属性,以便在其他方法中使用
        this.response = response;
        // 获取当前请求的会话对象,如果不存在则创建新的会话对象,并将其赋值给当前类的 session 属性
        this.session = request.getSession(true);
        // 从会话中获取存储的登录用户信息,并将其赋值给当前类的 loginUser 属性
        loginUser = (User) session.getAttribute("loginUser");
        // 从 IllnessKindService 中获取疾病分类列表,并将其存储在会话中,方便在其他地方使用
        session.setAttribute("kindList", illnessKindService.findList());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值