jackson工具类 对象转字符串 -- 字符串转对象

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

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

先上依赖apache

 

<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.javajson

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