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

141 lines
5.0 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}