Spring boot 集成hessian - LocalDateTime序列化和反序列化
- 反序列化
- import com.caucho.hessian.HessianException;
- import com.caucho.hessian.io.AbstractDeserializer;
- import com.caucho.hessian.io.AbstractHessianInput;
- import com.caucho.hessian.io.IOExceptionWrapper;
- import java.io.IOException;
- import java.time.LocalDateTime;
- import java.time.ZoneOffset;
- /**
- * @author zenglw
- * @date 2018/6/7
- */
- public class LocalDateTimeDeserializer extends AbstractDeserializer {
- @Override
- public Class getType()
- {
- return LocalDateTime.class;
- }
- @Override
- public Object readObject(AbstractHessianInput in,
- Object []fields)
- throws IOException
- {
- String []fieldNames = (String []) fields;
- int ref = in.addRef(null);
- long initValue = Long.MIN_VALUE;
- for (int i = 0; i < fieldNames.length; i++) {
- String key = fieldNames[i];
- if (key.equals("value")) {
- initValue = in.readUTCDate();
- } else {
- in.readObject();
- }
- }
- Object value = create(initValue);
- in.setRef(ref, value);
- return value;
- }
- private Object create(long initValue)
- throws IOException
- {
- if (initValue == Long.MIN_VALUE) {
- throw new IOException(LocalDateTime.class + " expects name.");
- }
- try {
- return LocalDateTime.ofEpochSecond(new Long(initValue)/1000,Integer.valueOf(String.valueOf(initValue%1000))*1000,ZoneOffset.of("+8"));
- } catch (Exception e) {
- throw new IOExceptionWrapper(e);
- }
- }
- }
- 序列化
- import com.caucho.hessian.io.AbstractHessianOutput;
- import com.caucho.hessian.io.AbstractSerializer;
- import java.io.IOException;
- import java.time.LocalDateTime;
- import java.time.ZoneOffset;
- /**
- * @author zenglw
- * @date 2018/6/7
- */
- public class LocalDateTimeSerializer extends AbstractSerializer {
- @Override
- public void writeObject(Object obj, AbstractHessianOutput out)
- throws IOException
- {
- if (obj == null) {
- out.writeNull();
- } else {
- Class cl = obj.getClass();
- if (out.addRef(obj)) {
- return;
- }
- // ref 返回-2 便是开始写Map
- int ref = out.writeObjectBegin(cl.getName());
- if (ref < -1) {
- out.writeString("value");
- Long milliSecond = ((LocalDateTime) obj).toInstant(ZoneOffset.of("+8")).toEpochMilli();
- out.writeUTCDate(milliSecond);
- out.writeMapEnd();
- } else {
- if (ref == -1) {
- out.writeInt(1);
- out.writeString("value");
- out.writeObjectBegin(cl.getName());
- }
- Long milliSecond = ((LocalDateTime) obj).toInstant(ZoneOffset.of("+8")).toEpochMilli();
- out.writeUTCDate(milliSecond);
- }
- }
- }
- }
- hessian的序列化工厂
- import com.caucho.hessian.io.ExtSerializerFactory;
- import com.caucho.hessian.io.SerializerFactory;
- import com.klxx.ta.common.util.hessian.LocalDateTimeDeserializer;
- import com.klxx.ta.common.util.hessian.LocalDateTimeSerializer;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- /**
- * @author zenglw
- * @date 2018/6/7
- */
- @Configuration
- public class HessianConfig {
- @Bean
- public SerializerFactory serializerFactory() {
- // DO 自定义hessian反序列化
- // step 1. 定义外部序列化工厂
- ExtSerializerFactory extSerializerFactory = new ExtSerializerFactory();
- extSerializerFactory.addSerializer(java.time.LocalDateTime.class,new LocalDateTimeSerializer());
- extSerializerFactory.addDeserializer(java.time.LocalDateTime.class,new LocalDateTimeDeserializer());
- // step 2. 序列化工厂
- SerializerFactory serializerFactory = new SerializerFactory();
- serializerFactory.addFactory(extSerializerFactory);
- return serializerFactory;
- }
- }
- hessian服务端暴露服务
- import com.caucho.hessian.io.SerializerFactory;
- import com.klxx.ta.foundation.api.OrganizationInfoApi;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.remoting.caucho.HessianServiceExporter;
- /**
- * Hessian注册对外提供服务的service
- * @author zenglw
- * @date 2018/6/4
- */
- @Configuration
- public class HessianExportConfig {
- @Autowired
- private OrganizationInfoApi organizationInfoApi;
- @Bean(name = "organizationInfoApi")
- public HessianServiceExporter accountService(SerializerFactory serializerFactory) throws Exception {
- HessianServiceExporter exporter = new HessianServiceExporter();
- exporter.setSerializerFactory(serializerFactory);
- exporter.setService(organizationInfoApi);
- exporter.setServiceInterface(OrganizationInfoApi.class);
- return exporter;
- }
- }
- hessian客户端的服务代理配置
- import com.caucho.hessian.io.SerializerFactory;
- import com.klxx.ta.foundation.api.OrganizationInfoApi;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.remoting.caucho.HessianProxyFactoryBean;
- /**
- * @author zenglw
- * @date 2018/6/7
- */
- @Configuration
- public class HessianProxyConfig {
- @Value("${hessian.external.service.url.foundation}")
- private String foundationUrl;
- @Bean(name = "accountServiceApi")
- public HessianProxyFactoryBean accountServiceApi(SerializerFactory serializerFactory) {
- HessianProxyFactoryBean hessianProxyFactoryBean = new HessianProxyFactoryBean();
- hessianProxyFactoryBean.setSerializerFactory(serializerFactory);
- hessianProxyFactoryBean.setServiceUrl(foundationUrl + "/organizationInfoApi");
- hessianProxyFactoryBean.setServiceInterface(OrganizationInfoApi.class);
- return hessianProxyFactoryBean;
- }
- }
Spring boot 集成hessian - LocalDateTime序列化和反序列化的更多相关文章
- spring boot 集成 zookeeper 搭建微服务架构
PRC原理 RPC 远程过程调用(Remote Procedure Call) 一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远程系统资源,R ...
- SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache
前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache.RedisCache.ConcurrentMapCac ...
- 【spring boot】【redis】spring boot 集成redis的发布订阅机制
一.简单介绍 1.redis的发布订阅功能,很简单. 消息发布者和消息订阅者互相不认得,也不关心对方有谁. 消息发布者,将消息发送给频道(channel). 然后是由 频道(channel)将消息发送 ...
- Lombok安装及Spring Boot集成Lombok
文章目录 Lombok有什么用 使用Lombok时需要注意的点 Lombok的安装 spring boot集成Lombok Lombok常用注解 @NonNull @Cleanup @Getter/@ ...
- (35)Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】
[本文章是否对你有用以及是否有好的建议,请留言] 本文章牵涉到的技术点比较多:Spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对 ...
- Spring Boot 2.X(六):Spring Boot 集成Redis
Redis 简介 什么是 Redis Redis 是目前使用的非常广泛的免费开源内存数据库,是一个高性能的 key-value 数据库. Redis 与其他 key-value 缓存(如 Memcac ...
- Spring Boot 集成 RabbitMQ 实战
Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 ...
- SpringBoot(十一): Spring Boot集成Redis
1.在 pom.xml 中配置相关的 jar 依赖: <!-- 加载 spring boot redis 包 --> <dependency> <groupId>o ...
- Spring Boot集成Jasypt安全框架
Jasypt安全框架提供了Spring的集成,主要是实现 PlaceholderConfigurerSupport类或者其子类. 在Sring 3.1之后,则推荐使用PropertySourcesPl ...
随机推荐
- async的基本用法
1. async函数的基本形式 //函数声明 async function foo() {} //函数表达式 const foo = async function () {}; //对象的方法 let ...
- eclipse ide for java ee developers 开发环境搭建(J2EE) 【转载】
使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给团队中新来的应届生做指导,专门讲解了一下Eclipse开发环境的搭建过程, 一是帮助他们尽快的熟悉IDE的使用,二也是保证团队 ...
- Codeforces Round #331 (Div. 2) B. Wilbur and Array
B. Wilbur and Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Human life FZU - 2295 最大权闭合子图(第一次遇到被教育了)
Xzz is playing a MMORPG "human life". In this game, there are N different skills. Some ski ...
- POJ 2226 Muddy Fields(二分匹配 巧妙的建图)
Description Rain has pummeled the cows' field, a rectangular grid of R rows and C columns (1 <= R ...
- simpleDateFormat的 学习
http://blog.csdn.net/qq_27093465/article/details/53034427
- dns随笔(部分转载)
1.allow-notify allow-notify 定义了一个匹配列表并且只应用于从dns区域(slave zone),比如,这个列表是一个ip列表,它 2. 触发同步的过程 http://www ...
- 数据结构:Rope-区间翻转
BZOJ1269 上一篇文章介绍了Rope的简单应用,这里多了一个操作,区间翻转 同时维护一正一反两个rope……反转即交换两个子串 下面给出代码: #include<cstdio> #i ...
- [Luogu 2596] ZJOI2006 书架
[Luogu 2596] ZJOI2006 书架 第一次指针写 FHQ_Treap(省选噩梦数据结构)AC 啦! 省选试机写它,紧张过度失败了. 省选 Day 1 考场写它,写挂了. 省选 Day 1 ...
- C# 从串口读取数据
最近要做系统集成,需要从串口读取数据,随学习一下相关知识: 以下是从串口读取数据 public static void Main() { SerialPort mySerialPort = new S ...