控制器

自动路由

规则

/controller 文件夹下的文件夹名或者文件名(去除文件夹名、Controller、模块名)/模块文件夹名/方法名

举例

 // 模块目录
 ├── modules
 │   └── demo(模块名)
 │   │    └── controller(接口)
 │   │    │     └── admin(后端接口)
 │   │    │     │     └── AdminDemoGoodsController.java(商品的controller)
 │   │    │     └── app(前端接口)
 │   │    │     │     └── AppDemoGoodsController.java(商品的controller)

生成的路由前缀为: /admin/demo/goods/xxx/app/demo/goods/xxx

手动

/**
 * 测试CURD
 */
@Tag(name = "测试CURD", description = "测试CURD")
@CoolRestController(value = "/cool", api = {"add", "delete", "update", "page", "list", "info"})
public class AdminDemoCrudController extends BaseController<DemoCrudService, DemoCrudEntity> {
    @Override
    protected void init(HttpServletRequest request, JSONObject requestParams) {

    }
}

原理

实现代码位于 com/cools/core/request/prefix

  • CoolRestController 继承 springbootRestController,因此CoolRestController具备RestController的所有特性;
  • 继承springbootRequestMappingHandlerMapping, 重写getMappingForMethod方法,根据一定的规则即可自动生成;

CRUD 配置

通用接口


/**
 * 测试CURD
 */
@Tag(name = "测试CURD", description = "测试CURD") // swagger文档相关
@CoolRestController(api = {"add", "delete", "update", "page", "list", "info"})
public class AdminDemoCrudController extends BaseController<DemoCrudService, DemoCrudEntity> {
    @Override
    protected void init(HttpServletRequest request, JSONObject requestParams) {

    }
}

这样就默认实现了

  • POST 新增
  • POST 删除
  • POST 修改
  • POST 分页查询
  • POST 查询列表
  • GET 根据列表查询单个信息

等 6 个接口

WARNING

POST 请求相关数据都放在请求的 body 中,格式为 json 格式,请求 content-type 为: application/json

查询配置

package com.cooljs.modules.demo.controller.admin;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cooljs.core.annotation.CoolRestController;
import com.cooljs.core.base.BaseController;
import com.cooljs.modules.demo.entity.DemoCrudEntity;
import com.cooljs.modules.demo.service.DemoCrudService;
import io.swagger.v3.oas.annotations.tags.Tag;

import javax.servlet.http.HttpServletRequest;

/**
 * 测试CURD
 */
@Tag(name = "测试CURD", description = "测试CURD")
@CoolRestController(api = {"add", "delete", "update", "page", "list", "info"})
public class AdminDemoCrudController extends BaseController<DemoCrudService, DemoCrudEntity> {
    @Override
    protected void init(HttpServletRequest request, JSONObject requestParams) {
        setPageOption(createOp() // 分页查询配置
                .fieldEq("status") // 字段全匹配,对应请求参数中同名参数
                .keyWordLikeFields("name", "phone") // 需要模糊查询的字段,对应请求参数中的 keyWord
                .select("name", "phone", "age") // 返回字段
                .queryWrapper(Wrappers.<DemoCrudEntity>query().eq("name", requestParams.getStr("name")))); // 其他查询方式 具体看 https://baomidou.com/文档
        setListOption(createOp()); // 列表查询 跟分页查询一样
    }
}

请求参数

为了方便获取参数,框架封装了一个请求属性,将 URL、表单、body 等参数封装在了一个JSONObject requestParams,开发者可以从中方便的获取各种参数;

@Tag(name = "测试CURD", description = "测试CURD")
@CoolRestController(api = {"add", "delete", "update", "page", "list", "info"})
public class AdminDemoCrudController extends BaseController<DemoCrudService, DemoCrudEntity> {
    @Override
    protected void init(HttpServletRequest request, JSONObject requestParams) {

    }

    @PostMapping("/test")
    public R test(@RequestAttribute JSONObject requestparams, String user) {
        System.out.println(requestparams.getStr("user"));
        return R.ok();
    }
}

重写实现

默认通用 6 个接口方法,如果不满足需求,可以在对应的service中重写实现方法

controller

@Tag(name = "测试CURD", description = "测试CURD")
@CoolRestController(api = {"add", "delete", "update", "page", "list", "info"})
public class AdminDemoCrudController extends BaseController<DemoCrudService, DemoCrudEntity> {
    @Override
    protected void init(HttpServletRequest request, JSONObject requestParams) {

    }
}

service 重写实现

@Service
public class DemoCrudServiceImpl extends BaseServiceImpl<DemoCrudMapper, DemoCrudEntity> implements DemoCrudService {

    @Override
    public Object page(JSONObject requestParams, Page<DemoCrudEntity> page, QueryWrapper<DemoCrudEntity> queryWrapper) {
        return super.page(requestParams, page, queryWrapper);
    }
}

Last Updated: