camel-test3-17/camel-mybatis-yml/PaginationAggregator.java

141 lines
5.0 KiB
Java
Raw Normal View History

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<Object> 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<Object>)(data != null ? data : Collections.emptyList()));
// 将分页响应设置为消息体
exchange.getIn().setBody(response);
}
/**
* 创建空分页响应
*/
public void createEmptyPageResponse(Exchange exchange) {
PageResponse<Object> 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<String, String> 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<String, String> 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<String, String> response = new HashMap<>();
response.put("error", message);
exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 500);
exchange.getIn().setBody(response);
}
}