feat(extension/crud): 新增 Api.BATCH_DELETE 批量删除枚举,拆分单个删除和批量删除接口

This commit is contained in:
2025-06-16 22:29:00 +08:00
parent a7d1e71ab3
commit bc53d5bfff
5 changed files with 138 additions and 5 deletions

View File

@@ -25,6 +25,7 @@ import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.web.util.pattern.PathPatternParser;
import top.continew.starter.core.util.ExceptionUtils;
import top.continew.starter.extension.crud.annotation.CrudApi;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.extension.crud.enums.Api;
@@ -52,8 +53,9 @@ public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMappi
CrudRequestMapping crudRequestMapping = handlerType.getDeclaredAnnotation(CrudRequestMapping.class);
// 过滤 API如果非本类中定义且 API 列表中不包含,则忽略
Api[] apiArr = crudRequestMapping.api();
Api api = ExceptionUtils.exToNull(() -> Api.valueOf(method.getName().toUpperCase()));
if (method.getDeclaringClass() != handlerType && !ArrayUtil.contains(apiArr, api)) {
CrudApi crudApi = AnnotatedElementUtils.findMergedAnnotation(method, CrudApi.class);
if (method.getDeclaringClass() != handlerType && !ArrayUtil.contains(apiArr, ExceptionUtils
.exToNull(crudApi::value))) {
return null;
}
// 拼接路径(合并了 @RequestMapping 的部分能力)

View File

@@ -146,13 +146,27 @@ public abstract class AbstractCrudController<S extends CrudService<L, D, Q, C>,
/**
* 删除
*
* @param req 删除请求参数
* @param id ID
*/
@CrudApi(Api.DELETE)
@Operation(summary = "删除数据", description = "删除数据")
@Parameter(name = "id", description = "ID", example = "1", in = ParameterIn.PATH)
@ResponseBody
@DeleteMapping("/{id}")
public void delete(@PathVariable("id") Long id) {
baseService.delete(List.of(id));
}
/**
* 批量删除
*
* @param req 删除请求参数
*/
@CrudApi(Api.BATCH_DELETE)
@Operation(summary = "批量删除数据", description = "批量删除数据")
@ResponseBody
@DeleteMapping
public void delete(@Validated @RequestBody IdsReq req) {
public void batchDelete(@Validated @RequestBody IdsReq req) {
baseService.delete(req.getIds());
}

View File

@@ -63,4 +63,9 @@ public enum Api {
* 导出
*/
EXPORT,
/**
* 批量删除
*/
BATCH_DELETE,
}

View File

@@ -29,7 +29,6 @@ import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.servlet.http.HttpServletResponse;
@@ -40,6 +39,7 @@ import top.continew.starter.core.util.ClassUtils;
import top.continew.starter.core.util.ReflectUtils;
import top.continew.starter.core.validation.CheckUtils;
import top.continew.starter.core.validation.ValidationUtils;
import top.continew.starter.data.mp.mapper.BaseMapper;
import top.continew.starter.data.mp.service.impl.ServiceImpl;
import top.continew.starter.data.mp.util.QueryWrapperHelper;
import top.continew.starter.extension.crud.annotation.DictModel;