一、新建一个项目,导入这两个jar包,下载见附件:
jackson-core-asl-1.9.12.jar
jackson-mapper-asl-1.9.12.jar
?
二、新建一个工具类
?
JsonMapper.java
package com.ebiz.logic.service.impl; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonProcessingException; 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.map.util.JSONPObject; import org.codehaus.jackson.type.JavaType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ebiz.framework.util.date.DateUtil; /** * 简单封装Jackson,实现JSON String<->Java Object的Mapper. * * 封装不同的输出风格, 使用不同的builder函数创建实例. * */ public class JsonMapper { private static Logger logger = LoggerFactory.getLogger(JsonMapper.class); private ObjectMapper mapper; public JsonMapper(Inclusion inclusion) { mapper = new ObjectMapper(); //设置输出时包含属性的风格 mapper.setSerializationInclusion(inclusion); //设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性 mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); //禁止使用int代表Enum的order()來反序列化Enum,非常危險 mapper.configure(DeserializationConfig.Feature.FAIL_ON_NUMBERS_FOR_ENUMS, true); } /** * 创建输出全部属性到Json字符串的Mapper. */ public static JsonMapper buildNormalMapper() { return new JsonMapper(Inclusion.ALWAYS); } /** * 创建只输出非空属性到Json字符串的Mapper. */ public static JsonMapper buildNonNullMapper() { return new JsonMapper(Inclusion.NON_NULL); } /** * 创建只输出初始值被改变的属性到Json字符串的Mapper. */ public static JsonMapper buildNonDefaultMapper() { return new JsonMapper(Inclusion.NON_DEFAULT); } /** * 创建只输出非Null且非Empty(如List.isEmpty)的属性到Json字符串的Mapper. */ public static JsonMapper buildNonEmptyMapper() { return new JsonMapper(Inclusion.NON_EMPTY); } /** * 如果对象为Null, 返回"null". * 如果集合为空集合, 返回"[]". */ public String toJson(Object object) { try { return mapper.writeValueAsString(object); } catch (IOException e) { throw NestedException.wrap(e); } } /** * 如果JSON字符串为Null或"null"字符串, 返回Null. * 如果JSON字符串为"[]", 返回空集合. * * 如需读取集合如List/Map, 且不是List<String>这种简单类型时,先使用函數constructParametricType构造类型. * @see #constructParametricType(Class, Class...) */ public <T> T fromJson(String jsonString, Class<T> clazz) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return mapper.readValue(jsonString, clazz); } catch (IOException e) { throw NestedException.wrap(e); } } /** * 如果JSON字符串为Null或"null"字符串, 返回Null. * 如果JSON字符串为"[]", 返回空集合. * * 如需读取集合如List/Map, 且不是List<String>这种简单类型时,先使用函數constructParametricType构造类型. * @see #constructParametricType(Class, Class...) */ @SuppressWarnings("unchecked") public <T> T fromJson(String jsonString, JavaType javaType) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return (T) mapper.readValue(jsonString, javaType); } catch (IOException e) { throw NestedException.wrap(e); } } @SuppressWarnings("unchecked") public <T> T fromJson(String jsonString, Class<?> parametrized, Class<?>... parameterClasses) { return (T) this.fromJson(jsonString, constructParametricType(parametrized, parameterClasses)); } @SuppressWarnings("unchecked") public <T> List<T> fromJsonToList(String jsonString, Class<T> classMeta){ return (List<T>) this.fromJson(jsonString,constructParametricType(List.cl