From df50faaeab506de30845e79f8ebe05db00482b56 Mon Sep 17 00:00:00 2001 From: Date: Sat, 15 Mar 2025 11:08:17 +0000 Subject: [PATCH] =?UTF-8?q?2025/3/15=2019:07:52---=E5=B0=86json=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BAfastjson?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- camel-mybatis-yml/RequestProcessor.java | 58 ++++++++++++++----------- camel-mybatis-yml/jbang.properties | 4 ++ 2 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 camel-mybatis-yml/jbang.properties diff --git a/camel-mybatis-yml/RequestProcessor.java b/camel-mybatis-yml/RequestProcessor.java index 5dece78..17197f9 100644 --- a/camel-mybatis-yml/RequestProcessor.java +++ b/camel-mybatis-yml/RequestProcessor.java @@ -2,12 +2,12 @@ package com.example.processor; import com.example.model.AdvancedSearchRequest; import com.example.model.PageRequest; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.apache.camel.Exchange; -import org.apache.camel.Configuration; -import org.apache.camel.BindToRegistry; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializeConfig; +import com.alibaba.fastjson.serializer.SerializerFeature; +import org.apache.camel.Exchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,11 +20,18 @@ import java.util.Map; * 适用于Camel Karavan低代码平台配置 * 通用处理器,不依赖于特定实体类型 */ -@Configuration -@BindToRegistry("requestProcessor") public class RequestProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(RequestProcessor.class); - private final ObjectMapper objectMapper = new ObjectMapper(); + private final SerializeConfig serializeConfig; + + public RequestProcessor() { + // 配置Fastjson序列化 + serializeConfig = new SerializeConfig(); + // 配置日期序列化为时间戳 + serializeConfig.put(Date.class, (serializer, object, fieldName, fieldType, features) -> { + serializer.write(((Date) object).getTime()); + }); + } /** * 从请求头中提取ID参数 @@ -34,7 +41,7 @@ public class RequestProcessor { return Long.parseLong(idStr); } - /** + /** * 从请求体解析分页参数 */ public Map extractPageCountParams(Exchange exchange) throws Exception { @@ -43,7 +50,7 @@ public class RequestProcessor { if(body instanceof String){ String bodyStr = (String) body; LOGGER.info("分页拿到的请求body: {}", bodyStr); - pageRequest = objectMapper.readValue(bodyStr, PageRequest.class); + pageRequest = JSON.parseObject(bodyStr, PageRequest.class); // 保存请求对象供后续使用 exchange.setProperty("pageRequest", pageRequest); @@ -51,7 +58,7 @@ public class RequestProcessor { @SuppressWarnings("unchecked") Map bodyMap = (Map) body; LOGGER.info("分页拿到的请求body: {}", bodyMap); - pageRequest = objectMapper.convertValue(bodyMap, PageRequest.class); + pageRequest = JSONObject.toJavaObject(new JSONObject(bodyMap), PageRequest.class); }else{ // 处理其他类型或null LOGGER.warn("无法处理的请求体类型: {}", body != null ? body.getClass().getName() : "null"); @@ -94,29 +101,28 @@ public class RequestProcessor { AdvancedSearchRequest searchRequest = null; if(body instanceof String){ String bodyStr = (String) body; - LOGGER.info("高级搜索拿到的请求body--string: {}", bodyStr); - searchRequest = objectMapper.readValue(bodyStr, AdvancedSearchRequest.class); + LOGGER.info("高级搜索拿到的请求body: {}", bodyStr); + searchRequest = JSON.parseObject(bodyStr, AdvancedSearchRequest.class); }else if(body instanceof Map){ @SuppressWarnings("unchecked") Map bodyMap = (Map) body; - LOGGER.info("高级搜索拿到的请求body---map: {}", bodyMap); - searchRequest = objectMapper.convertValue(bodyMap, AdvancedSearchRequest.class); + LOGGER.info("高级搜索拿到的请求body: {}", bodyMap); + searchRequest = JSONObject.toJavaObject(new JSONObject(bodyMap), AdvancedSearchRequest.class); + }else if(body instanceof JSONObject){ + searchRequest = JSONObject.toJavaObject((JSONObject)body, AdvancedSearchRequest.class); }else{ - LOGGER.warn("无法处理的请求体类型: {}---body的类型:{}", body != null ? body.getClass().getName() : "null",body.getClass()); + LOGGER.warn("无法处理的请求体类型: {}", body != null ? body.getClass().getName() : "null"); searchRequest = new AdvancedSearchRequest(); } // 保存请求对象供后续使用 exchange.setProperty("searchRequest", searchRequest); - Map params = new HashMap<>(); - params.put("offset", searchRequest.getOffset()); - params.put("limit", searchRequest.getLimit()); - params.put("criteria", searchRequest.getCriteria()); - params.put("sortField", searchRequest.getSortField()); - params.put("sortOrder", searchRequest.getSortOrder()); - - LOGGER.info("转换后参数:{}",params); + // 使用日期序列化为时间戳的配置序列化对象 + String searchRequestStr = JSON.toJSONString(searchRequest, serializeConfig, SerializerFeature.WriteMapNullValue); + @SuppressWarnings("unchecked") + Map params = JSON.parseObject(searchRequestStr, Map.class); + return params; } @@ -147,7 +153,7 @@ public class RequestProcessor { */ public T prepareEntity(Exchange exchange, Class entityClass) throws Exception { String body = exchange.getIn().getBody(String.class); - T entity = objectMapper.readValue(body, entityClass); + T entity = JSON.parseObject(body, entityClass); // 通过反射设置创建和更新时间(如果实体有这些字段) try { @@ -204,7 +210,7 @@ public class RequestProcessor { Long id = Long.parseLong(idStr); String body = exchange.getIn().getBody(String.class); - T entity = objectMapper.readValue(body, entityClass); + T entity = JSON.parseObject(body, entityClass); // 通过反射设置ID和更新时间 try { diff --git a/camel-mybatis-yml/jbang.properties b/camel-mybatis-yml/jbang.properties new file mode 100644 index 0000000..e260a3b --- /dev/null +++ b/camel-mybatis-yml/jbang.properties @@ -0,0 +1,4 @@ +# 添加私有仓库 +maven.repos.myrepo=http://192.168.56.12:9081/repository/gzkx-maven-public/ +deps=\ + com.alibaba:fastjson:2.0.56 \ No newline at end of file