美文网首页spring boot项目实战程序员Spring Boot
spring boot项目实战之工具篇(json)

spring boot项目实战之工具篇(json)

作者: 思与学 | 来源:发表于2017-10-07 19:35 被阅读370次

    对象转json、json转对象是我们开发过程中经常遇到的,提取一套高效、易用的工具类会让开发过程舒爽不少,下面提供一个基于jackson包的常用json工具方法。

    1、添加maven依赖

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    

    2、对象转为json

    private static final ObjectMapper mapper = new ObjectMapper();
    /**
     * 将对象转化为json
     * @author yangwenkui
     * @time 2017年3月16日 下午2:55:10
     * @param obj 待转化的对象
     * @return 当转化发生异常时返回null
     */
    public static String toJson(Object obj){
        if(obj == null){
            return null;
        }
        try {
            return mapper.writeValueAsString(obj);
        } catch (IOException e) {
            logger.error(String.format("obj=[%s]", obj.toString()), e);
        }
        return null;
    }
    

    3、json转为对象

    /**
     * 将json转化为对象
     * @author yangwenkui
     * @time 2017年3月16日 下午2:56:26
     * @param json json对象
     * @param clazz 待转化的对象类型
     * @return 当转化发生异常时返回null
     */
    public static <T> T fromJson(String json,Class<T> clazz){
        if(json == null){
            return null;
        }
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            logger.error(String.format("json=[%s]", json), e);
        }
        return null;
    }
    

    4、json转为集合对象

    /**
     * 将json对象转化为集合类型
     * @author yangwenkui
     * @time 2017年3月16日 下午2:57:15
     * @param json json对象
     * @param collectionClazz 具体的集合类的class,如:ArrayList.class
     * @param clazz 集合内存放的对象的class
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static <T> Collection<T> fromJson(String json,Class<? extends Collection> collectionClazz,Class<T> clazz){
        if(json == null){
            return null;
        }
        try {
            Collection<T> collection =  mapper.readValue(json, getCollectionType(collectionClazz,clazz));
            return collection;
        } catch (IOException e) {
            logger.error(String.format("json=[%s]", json), e);
        }
        return null;
    }
    
    private static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {   
        return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);   
    }
    

    小结

    1. 常用的JSON技术有,json-lib、Jackson、Gson、FastJson,在易用性、性能等方面Jackson都表现不错,推荐使用Jackson包;
    2. 将对象对象存入缓存、从缓存内取出字符串转为对象、REST API接口返回结果转为对象等诸多场景下都有对象和json之间的转换操作,“见到经常出现的重复代码,提取出来作为通用方法是一个好的习惯”。

    完整代码请参考github内rest-base项目com.onecoderspace.base.util.JacksonHelper。
    https://github.com/q7322068/rest-base

    相关文章

      网友评论

        本文标题:spring boot项目实战之工具篇(json)

        本文链接:https://www.haomeiwen.com/subject/nfcsyxtx.html