博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web3j源码之ObjectMapperFactory
阅读量:6719 次
发布时间:2019-06-25

本文共 2712 字,大约阅读时间需要 9 分钟。

package org.web3j.protocol;import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.databind.BeanDescription;import com.fasterxml.jackson.databind.DeserializationConfig;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.JsonDeserializer;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.ObjectReader;import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;import com.fasterxml.jackson.databind.module.SimpleModule;import org.web3j.protocol.core.Response;import org.web3j.protocol.deserializer.RawResponseDeserializer;/** * Factory for managing our ObjectMapper instances. */public class ObjectMapperFactory {    private static final ObjectMapper DEFAULT_OBJECT_MAPPER = new ObjectMapper();    static {        configureObjectMapper(DEFAULT_OBJECT_MAPPER, false);    }    public static ObjectMapper getObjectMapper() {        return getObjectMapper(false);    }    public static ObjectMapper getObjectMapper(boolean shouldIncludeRawResponses) {        if (!shouldIncludeRawResponses) {            return DEFAULT_OBJECT_MAPPER;        }        return configureObjectMapper(new ObjectMapper(), true);    }    public static ObjectReader getObjectReader() {        return DEFAULT_OBJECT_MAPPER.reader();    }    private static ObjectMapper configureObjectMapper(            ObjectMapper objectMapper, boolean shouldIncludeRawResponses) {        if (shouldIncludeRawResponses) {            SimpleModule module = new SimpleModule();            module.setDeserializerModifier(new BeanDeserializerModifier() {                @Override                public JsonDeserializer
modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer
deserializer) { if (Response.class.isAssignableFrom(beanDesc.getBeanClass())) { return new RawResponseDeserializer(deserializer); } return deserializer; } }); objectMapper.registerModule(module); } objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); return objectMapper; }}

这个类改变了我对工厂模式的看法,之前我认为工厂模式是生产一个类的多个不同子类的对象的,工厂类里存在if-else或switch语句判断生产的子类。对于工厂模式,现在看来只产生一个类的对象也可以,不存在不同子类的情况,不存在if-else或switch语句。ObjectMapperFactory只生产ObjectMapper这一个类的对象,只是根据需要提供一个默认生产好的ObjectMapper对象,或根据条件生产定制的ObjectMapper。

 

转载于:https://www.cnblogs.com/windyWu/p/10382782.html

你可能感兴趣的文章
ASP.NET 2.0学习笔记之Object Tag Syntax
查看>>
Redis 配置文件
查看>>
Jmeter Smock Test规范设计
查看>>
MurmurHash算法:高运算性能,低碰撞率的hash算法
查看>>
Download error: unknown url type: https
查看>>
vagrant虚拟机共享目录在windows宿主下的禁忌
查看>>
数据表操作类
查看>>
[v9] 列表页 调用 正文内容 或 自定义 字段(moreinfo的调用方法)
查看>>
php截取指定字符串之间的字符串的类
查看>>
C# 根据Excel模版导出文件
查看>>
Oracle与DB2的区别
查看>>
bzoj 2500 幸福的道路 树上直径+set
查看>>
新iPad未到 老iPad价格反弹
查看>>
[转载] 建党伟业
查看>>
内核参数优化之1 keepalive解析
查看>>
django F表达式、Q表达式、annotate、order_by
查看>>
B和strong以及i和em的区别(转)
查看>>
CSS text-transform 属性——转换文本的大小写格式
查看>>
第一阶段检查结果
查看>>
ACM-ICPC (10/11)
查看>>