zoukankan      html  css  js  c++  java
  • jackson工具类 对象转字符串 -- 字符串转对象

    这个一个json的工具类。用的是jackson,当然还有谷歌的gosn,阿里的fastjson ,但是jackson的感觉还是最成熟(网上大神说的。。。)

    实现的功能很简单,对象转字符串  字符串转简单对象  转list<T>复杂对象  还包括时间格式化工具类 直接都能用。。。不用纠结原理咋实现!!!

    先上依赖

    <dependencies>
            <!--json格式化工具类-->
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.12</version>
            </dependency>
            <!--时间工具类-->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.3</version>
            </dependency>
            <!--apache工具类-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.5</version>
            </dependency>
    
            <!--加速开发的工具,可以省略getset和日志类,只需要注解就可以-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.6</version>
            </dependency>
            <!--日志相关-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.2</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>1.1.2</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.logback-extensions</groupId>
                <artifactId>logback-ext-spring</artifactId>
                <version>0.1.1</version>
            </dependency>
        </dependencies>
    View Code
    JsonUtil.java
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.codehaus.jackson.map.DeserializationConfig;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.map.SerializationConfig;
    import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
    import org.codehaus.jackson.type.JavaType;
    import org.codehaus.jackson.type.TypeReference;
    
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * Created by geely
     */
    @Slf4j
    public class JsonUtil {
    
        private static ObjectMapper objectMapper = new ObjectMapper();
        static{
            //对象的所有字段全部列入
            objectMapper.setSerializationInclusion(Inclusion.ALWAYS);
    
            //取消默认转换timestamps形式
            objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
    
            //忽略空Bean转json的错误
            objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
    
            //所有的日期格式都统一为以下的样式,即yyyy-MM-dd HH:mm:ss
            objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
    
            //忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
            objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
        }
    
    
        //对象转json字符串
        public static <T> String obj2String(T obj){
            if(obj == null){
                return null;
            }
            try {
                return obj instanceof String ? (String)obj :  objectMapper.writeValueAsString(obj);
            } catch (Exception e) {
                log.warn("Parse Object to String error",e);
                return null;
            }
        }
        //对象转json字符串 重载方法 格式化的jaon字符串 方便调试 实际开发取第一种方法
        public static <T> String obj2StringPretty(T obj){
            if(obj == null){
                return null;
            }
            try {
                return obj instanceof String ? (String)obj :  objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
            } catch (Exception e) {
                log.warn("Parse Object to String error",e);
                return null;
            }
        }
    
    
    
    
        //json字符串转对象转
        public static <T> T string2Obj(String str,Class<T> clazz){
            if(StringUtils.isEmpty(str) || clazz == null){
                return null;
            }
    
            try {
                return clazz.equals(String.class)? (T)str : objectMapper.readValue(str,clazz);
            } catch (Exception e) {
                log.warn("Parse String to Object error",e);
                return null;
            }
        }
    
    
        //json字符串转list<T>对象  和下面的一样
        public static <T> T string2Obj(String str, TypeReference<T> typeReference){
            if(StringUtils.isEmpty(str) || typeReference == null){
                return null;
            }
            try {
                return (T)(typeReference.getType().equals(String.class)? str : objectMapper.readValue(str,typeReference));
            } catch (Exception e) {
                log.warn("Parse String to Object error",e);
                return null;
            }
        }
    
        //json字符串转list<T>对象   和上面的一样
        public static <T> T string2Obj(String str,Class<?> collectionClass,Class<?>... elementClasses){
            JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
            try {
                return objectMapper.readValue(str,javaType);
            } catch (Exception e) {
                log.warn("Parse String to Object error",e);
                return null;
            }
        }
    
    
    
    
    
    
    
    
    
    
    
        public static void main(String[] args) {
    
            User user = new User();
            user.setAge(12);
            user.setId(1);
            user.setName("刘中华");
            String s = JsonUtil.obj2String(user);
            System.out.println(s);
            System.out.println("----------------------------------");
            //--------------------------------------
            System.out.println(JsonUtil.string2Obj(s,User.class));
            System.out.println("----------------------------------");
            //--------------------------------------
            ArrayList<User> users = new ArrayList<>();
            users.add(new User(1,"a",1));
            users.add(new User(2,"b",2));
            users.add(new User(3,"c",3));
            String s1 = JsonUtil.obj2String(users);
            System.out.println(s1);
            System.out.println("----------------------------------");
            //--------------------------------------
            System.out.println(JsonUtil.string2Obj(s1,new TypeReference<List<User>>(){}));
            System.out.println("----------------------------------");
            //--------------------------------------
            List<User> userListObj2 = JsonUtil.string2Obj(s1,List.class,User.class);
            System.out.println(userListObj2);
    
        }
    
    
    
    
    
    }
    View Code
    
    

      User.java

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    /**
     * Created by 敲代码的卡卡罗特
     * on 2018/4/6 15:59.
     */
    @Data
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private Integer id;
        private String name;
        private Integer age;
    }
    View Code
    DateTimeUtil.java
    
    
    import org.apache.commons.lang3.StringUtils;
    import org.joda.time.DateTime;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    
    import java.util.Date;
    
    /**
     * Created by geely
     */
    public class DateTimeUtil {
    
        //joda-time
    
        //str->Date
        //Date->str
        public static final String STANDARD_FORMAT = "yyyy-MM-dd HH:mm:ss";
    
    
        //字符串转日期
        public static Date strToDate(String dateTimeStr,String formatStr){
            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(formatStr);
            DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
            return dateTime.toDate();
        }
        //日期转字符串
        public static String dateToStr(Date date,String formatStr){
            if(date == null){
                return StringUtils.EMPTY;
            }
            DateTime dateTime = new DateTime(date);
            return dateTime.toString(formatStr);
        }
        //如果不写格式,则取默认格式
        public static Date strToDate(String dateTimeStr){
            DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(STANDARD_FORMAT);
            DateTime dateTime = dateTimeFormatter.parseDateTime(dateTimeStr);
            return dateTime.toDate();
        }
        //如果不写格式,则取默认格式
        public static String dateToStr(Date date){
            if(date == null){
                return StringUtils.EMPTY;
            }
            DateTime dateTime = new DateTime(date);
            return dateTime.toString(STANDARD_FORMAT);
        }
    
    
    
    
        public static void main(String[] args) {
            System.out.println(DateTimeUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss"));
            System.out.println(DateTimeUtil.strToDate("2010-01-01 11:11:11","yyyy-MM-dd HH:mm:ss"));
    
        }
    
    
    }
    View Code
    
    
    
     
     
  • 相关阅读:
    小结:ES7——async和await初识
    如何抽离、引用公共部分页面
    数据处理:高德、百度经纬度坐标的相互转化
    mock数据的基础使用
    express随笔
    ES6学习基础
    初学node.js
    ajax基础
    ajax的几个面试题
    (转)认识原型对象和原型链
  • 原文地址:https://www.cnblogs.com/coder-lzh/p/8647732.html
Copyright © 2011-2022 走看看