141 lines
5.0 KiB
Java
141 lines
5.0 KiB
Java
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);
|
||
}
|
||
} |