/**JsonBinder.java*/ package org.howsun.json; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion; import org.codehaus.jackson.type.TypeReference; import org.howsun.util.Strings; /** * Json:Jackson简单封装 * * @author howsun([email protected]) * @Date 2010-10-20 * @version v0.1 */ public class JacksonSupportJson implements Json { private static final org.howsun.log.Log log = org.howsun.log.LogFactory.getLog(JacksonSupportJson.class); private ObjectMapper objectMapper; public JacksonSupportJson(Inclusion inclusion) { objectMapper = new ObjectMapper(); //设置输出包含的属性 objectMapper.getSerializationConfig().setSerializationInclusion(inclusion); //设置输入时忽略JSON字符串中存在而Java对象实际没有的属性 objectMapper.getDeserializationConfig().set( org.codehaus.jackson.map.DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); setDateFormat(null); } /** * 创建输出全部属性到Json字符串的Binder. * @return Json */ public static Json buildNormalBinder() { return new JacksonSupportJson(Inclusion.ALWAYS); } /** * 创建只输出非空属性到Json字符串的Binder. * @return Json */ public static Json buildNonNullBinder() { return new JacksonSupportJson(Inclusion.NON_NULL); } /** * 创建只输出初始值被改变的属性到Json字符串的Binder. * @return Json */ public static Json buildNonDefaultBinder() { return new JacksonSupportJson(Inclusion.NON_DEFAULT); } /* (non-Javadoc) * @see com.bj58.wf.json.Json#fromJson(java.lang.String, java.lang.Class) */ public <T> T fromJson(String jsonString, Class<T> clazz) { try { if (Strings.hasLengthAfterTrimWhiteSpace(jsonString)) return objectMapper.readValue(jsonString, clazz); } catch (IOException e) { log.warn("parse json string error:" + jsonString, e); } return null; } @Override public <T> T fromJson(String jsonString, TypeReference<T> typeReference) throws JsonParseException, JsonMappingException, IOException { return objectMapper.readValue(jsonString, typeReference); } /* (non-Javadoc) * @see com.bj58.wf.json.Json#toJson(java.lang.Object) */ public String toJson(Object object) { try { return objectMapper.writeValueAsString(object); } catch (IOException e) { log.warn("write to json string error:" + object, e); } return null; } /* (non-Javadoc) * @see com.bj58.wf.json.Json#setDateFormat(java.lang.String) */ public void setDateFormat(String pattern) { if (!Strings.hasLengthAfterTrimWhiteSpace(pattern)) { pattern = "yyyy-MM-dd HH:mm:ss"; } DateFormat df = new SimpleDateFormat(pattern); objectMapper.getSerializationConfig().setDateFormat(df); objectMapper.getDeserializationConfig().setDateFormat(df); } /* (non-Javadoc) * @see com.bj58.wf.json.Json#getMapper() */ public ObjectMapper getMapper() { return objectMapper; } }