控制器
自动路由
规则
/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
继承springboot
的RestController
,因此CoolRestController
具备RestController
的所有特性;- 继承
springboot
的RequestMappingHandlerMapping
, 重写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);
}
}