package com.example.processor; import com.example.model.AdvancedSearchRequest; import com.example.model.PageRequest; import com.example.model.PageResponse; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.Configuration; import org.apache.camel.BindToRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 分页结果聚合处理器 * 适用于Camel Karavan低代码平台 */ @Configuration @BindToRegistry("paginationAggregator") public class PaginationAggregator implements Processor { private static final Logger LOGGER = LoggerFactory.getLogger(PaginationAggregator.class); @Override public void process(Exchange exchange) throws Exception { createPageResponse(exchange); } /** * 从普通分页请求创建分页响应 * 通用方法,适用于任何实体类型 */ public void createPageResponse(Exchange exchange) throws Exception { // 获取数据和总数 @SuppressWarnings("unchecked") List data = exchange.getIn().getBody(List.class); Long total = exchange.getProperty("total", Long.class); // 创建分页响应 PageResponse response = new PageResponse<>(); // 根据请求类型设置分页信息 if (exchange.getProperty("pageRequest") != null) { PageRequest pageRequest = exchange.getProperty("pageRequest", PageRequest.class); response.setPage(pageRequest.getPage()); response.setSize(pageRequest.getSize()); } else if (exchange.getProperty("searchRequest") != null) { AdvancedSearchRequest searchRequest = exchange.getProperty("searchRequest", AdvancedSearchRequest.class); response.setPage(searchRequest.getPage()); response.setSize(searchRequest.getSize()); } // 设置数据和总数 response.setTotal(total != null ? total : 0L); response.setData((List)(data != null ? data : Collections.emptyList())); // 将分页响应设置为消息体 exchange.getIn().setBody(response); } /** * 创建空分页响应 */ public void createEmptyPageResponse(Exchange exchange) { PageResponse response = new PageResponse<>(); // 尝试从请求中获取分页信息 if (exchange.getProperty("pageRequest") != null) { PageRequest pageRequest = exchange.getProperty("pageRequest", PageRequest.class); response.setPage(pageRequest.getPage()); response.setSize(pageRequest.getSize()); } else { // 使用默认值 response.setPage(1); response.setSize(10); } // 设置空数据和0总数 response.setTotal(0L); response.setData(Collections.emptyList()); // 将空分页响应设置为消息体 exchange.getIn().setBody(response); } /** * 处理成功响应(200 OK) */ public void setSuccessResponse(Exchange exchange) { exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 200); } /** * 设置创建成功的HTTP状态码和响应(201 Created) */ public void setCreatedResponse(Exchange exchange) { exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 201); } /** * 设置删除成功的HTTP状态码和响应(204 No Content) */ public void setDeletedResponse(Exchange exchange) { exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 204); exchange.getIn().setBody(null); } /** * 设置未找到资源的HTTP状态码和响应(404 Not Found) */ public void setNotFoundResponse(Exchange exchange, String entityName) { Map response = new HashMap<>(); response.put("error", entityName + "不存在"); exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 404); exchange.getIn().setBody(response); } /** * 设置冲突的HTTP状态码和响应(409 Conflict) */ public void setConflictResponse(Exchange exchange, String field) { Map response = new HashMap<>(); response.put("error", field + "已存在"); exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 409); exchange.getIn().setBody(response); } /** * 设置服务器错误HTTP状态码和响应(500 Internal Server Error) */ public void setErrorResponse(Exchange exchange, String message) { Map response = new HashMap<>(); response.put("error", message); exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 500); exchange.getIn().setBody(response); } }