`

java 反序列化复杂Map

    博客分类:
  • Java
阅读更多

java  如何反序列化复杂的map呢?

例如:

待反序列化的json字符串:

{"/policyTemplate":{"modifyType":2,"keyword":"12","replacement":"4"}}

什么是复杂的map呢?

map的key不是简单的int或者String,而是一个复杂的对象,比如Student,User等

实例:

map中key对应的java bean:

package com.common.bean;

/**
 * Created by 黄威 on 19/01/2017.<br >
 *     修改类型:1-完全替换;<br />2-关键字替换;<br />3-正则表达式替换
 */
public class ModifyTypeInfo {
    /***
     * 1-完全替换
     */
    public static final int MODIFY_TYPE_REPLACE_TOTALLY=1;
    /***
     * 2-关键字替换
     */
    public static final int MODIFY_TYPE_KEY_WORD=2;
    /***
     * 3-正则表达式替换
     */
    public static final int MODIFY_TYPE_REGUX_REPLACE=3;
    private int modifyType;
    private String keyword;
    private String replacement;

    public int getModifyType() {
        return modifyType;
    }

    public void setModifyType(int modifyType) {
        this.modifyType = modifyType;
    }

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public String getReplacement() {
        return replacement;
    }

    public void setReplacement(String replacement) {
        this.replacement = replacement;
    }
}

 单元测试:

@Test
    public void test_map(){
    	String modifyConf="{\"/policyTemplate\":{\"modifyType\":2,\"keyword\":\"12\",\"replacement\":\"9\"}}";
        Map<String, ModifyTypeInfo> proxymodifyResponseBodyMap=HWJacksonUtils.deSerializeMap(modifyConf,ModifyTypeInfo.class);
        System.out.println(proxymodifyResponseBodyMap);
    }

核心方法:

/**   
     * 获取泛型的Collection Type  
     * @param collectionClass 泛型的Collection   
     * @param elementClasses 元素类   
     * @return JavaType Java类型   
     * @since 1.0   
     */  
	public static JavaType getCollectionType(ObjectMapper mapper,Class<?> collectionClass, Class<?>... elementClasses) {   
        return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);   
    } 
 /***
     * 反序列化复杂map
     * @param jsonInput
     * @param clazz
     * @return
     */
    public static Map deSerializeMap(String jsonInput, Class clazz) {
        Map obj = null;
        try {
            ObjectMapper mapper = getObjectMapper();
            JavaType javaType = getCollectionType(mapper, HashMap.class, String.class, clazz);
            obj = mapper.readValue(jsonInput, javaType);
            return obj;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }

  实例:

//读取配置文件,并反序列化
private void parseConfig() {
        try {
            String configJson = readConfig(configFileTextField.getText2());
            proxyModifyResponseBodyMap = HWJacksonUtils.deSerializeMap(configJson, ModifyTypeInfo.class);
            servletPathList = new ArrayList<>();
            for (String key : proxyModifyResponseBodyMap.keySet()) {
                servletPathList.add(key);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

详情参考附件中的类:com/io/hw/json/HWJacksonUtils.java

 

 

1
0
分享到:
评论

相关推荐

    jackson-databind-3.0.0.jar下载

    2. 支持复杂对象与JSON的映射:支持Java类型如Map、List、数组以及自定义bean与JSON的相互转换。 3. 支持多种注解配置序列化和反序列化:支持@JsonIgnore, @JsonFormat, @JsonView等多种注解配置对象与JSON的映射方式...

    gson-2.8.6.jar下载

    3. 支持用户自定义序列化和反序列化的规则。可以直接将gson和bean-validation框架结合,校验Java对象的字段。 4. 支持基本数据类型及其封装类型,Collection类型,Date类型及自定义类型。 5. 支持将JSON数组转换为Java...

    json-lib-2.4-jdk15.jar下载

    3. 支持注解:支持@JSON、@JSONIgnore等注解配置对象的序列化和反序列化。 4. 支持流:除了支持对象/JSON与字符串的相互转换,也支持与InputStream/OutputStream的相互转换,处理大数据时比较有用。 5. 无依赖:json-lib...

    java 面试题 总结

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    Java高并发高性能分布式框架从无到有微服务架构设计.doc

    的对象变少),但是,读取数据时需要序列化/反序列化,因此会比堆缓存要慢很多。有 Ehcache 3.x、MapDB实现磁盘缓存 即缓存数据存储在磁道上,在JVM重启时数据还存在的,而堆缓存/堆外缓存数据会丢失 ,需要重新加载...

    超级有影响力霸气的Java面试题大全文档

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而...

    java面试题

    答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...

    Java高并发高性能分布式框架从无到有微服务架构设计(1).doc

    使用堆缓存的好处是没有序列化/反序列化,是最快的缓 存.缺点也很明显,当缓存的数据量很大时,GC〔垃圾回收〕暂停时间会变长,存储容量受 限于堆空间大小.一般通过软引用/弱引用来存储缓存对象,即当堆内存不足时,可以...

    typedpy:类型安全,严格的Python。 与标准Python搭配良好

    特征全功能,复杂的,基于类的类型系统支持JSON模式draft4功能,包括将模式映射到代码和将代码映射到模式序列化,类JSON的dict和typedpy对象之间的反序列化,包括自定义映射。 支持酸洗。 容易扩展。结构/字段内的...

    HawleyRetainer:一个 Android 注释处理和代码生成库,用于保留复杂对象,这些对象不能跨配置更改被打包或序列化为 Bundle

    霍利保持器一个 Android... 尽管如此,由于保留的对象不能被打包或序列化,它们仍然可以被垃圾收集器回收,从而导致数据丢失。 public class ExampleActivity extends Activity { @HawleyRetain Observable&lt; Respons

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    A .POJO类中的任何布尔类型的变量,都不要加is,因为部分框架解析时有可能会出现序列化错误。 B .包名统一使用单数形式,如:com.alibaba.mpp.util。 C .中括号是数组类型的一部分,数组定义如下:String[] ...

    java调用wsdl接口源码-cxf-plus:apachecxf在支持通用数据类型方面的增强

    泛型、支持的序列化对象种类等进行增强的框架。 增强的反射机制,可以对接口和POJO对象中的嵌套泛型、继承泛型等进行完整的解析,从而使得带有各种复杂泛型的接口可以正确发布和传输。 简化集成,针对目前大多数服务...

    JBPM4工作流应用开始指南.rar

    170 第7章 流程变量 171 7.1 变量作用域 173 7.2 变量类型 174 7.3 变量的自动更新和序列化 175 7.4 例程:用变量去控制一个流程的运行 177 7.5 小结 179 第8章 流程脚本 182 8.1 Java统一表达式语言 182 8.1.1 语法...

    最全Hibernate 参考文档

    8.3. 组件作为Map的索引(Components as Map indices ) 8.4. 组件作为联合标识符(Components as composite identifiers) 8.5. 动态组件 (Dynamic components) 9. 继承映射(Inheritance Mappings) 9.1. 三种策略 ...

    hibernate3.04中文文档.chm

    符合Java习惯的关系数据库持久化 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 ...

    ASP EXCEL导入SQL

    而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。  当前的网络应用软件还违背了REST的“无...

    Hibernate教程

    9.3. 组件作为Map的索引(Components as Map indices ) 9.4. 组件作为联合标识符(Components as composite identifiers) 9.5. 动态组件 (Dynamic components) 10. 继承映射(Inheritance Mappings) 10.1. 三种...

    freemarker总结

    在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:...

    Toad 使用快速入门

    使用Toad,我们可以通过一个图形化的用户界面快速访问数据库,完成复杂的SQL和PL/SQL代码编辑和测试工作。Toad由Oracle开发专家专门为开发人员而设计,是一个功能强大、结构紧凑的专业化PL/SQL开发环境。 Toad 主要...

    操作系统(内存管理)

    因此,如果一个进程运行超出了它初始分配的内存,那么它必须请求操作系统“映射进来(map in)”更多的内存。(映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,...

Global site tag (gtag.js) - Google Analytics