import java.io.IOException; import org.apache.commons.lang.StringUtils; 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; /** * 简单封装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) { logger.warn("write to json string error:" + object, e); return null; } } /** * 如果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) { logger.warn("parse json string error:" + jsonString, e); return null; } } /** * 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合. * * 如需读取集合如List/Map, 且不是List<String>这种简单类型时,先使用函數constructParametricType构造类型. * * @see #constructParametricType(Class, Class...) */ public <T> T fromJson(String jsonString, JavaType javaType) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return (T) mapper.readValue(jsonString, javaType); } catch (IOException e) { logger.warn("parse json string error:" + jsonString, e); return null; } } /** * 構造泛型的Type如List<MyBean>, * 则调用constructParametricType(ArrayList.class,MyBean.class) * Map<String,MyBean>则调用(HashMap.class,String.class, MyBean.class) */ public JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) { return mapper.getTypeFactory().constructParametricType(parametrized, parameterClasses); } /** * 當JSON裡只含有Bean的部分屬性時,更新一個已存在Bean,只覆蓋該部分的屬性. */ public <T> T update(T object, String jsonString) { try { return (T) mapper.readerForUpdating(object).readValue(jsonString); } catch (JsonProcessingException e) { logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e); } catch (IOException e) { logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e); } return null; } /** * 輸出JSONP格式數據. */ public String toJsonP(String functionName, Object object) { return toJson(new JSONPObject(functionName, object)); } /** * 設定是否使用Enum的toString函數來讀寫Enum, 為False時時使用Enum的name()函數來讀寫Enum, 默認為False. * 注意本函數一定要在Mapper創建後, 所有的讀寫動作之前調用. */ public void setEnumUseToString(boolean value) { mapper.configure(SerializationConfig.Feature.WRITE_ENUMS_USING_TO_STRING, value); mapper.configure(DeserializationConfig.Feature.READ_ENUMS_USING_TO_STRING, value); } /** * 取出Mapper做进一步的设置或使用其他序列化API. */ public ObjectMapper getMapper() { return mapper; } }
相关推荐
《让Jackson JSON生成的数据包含的中文以unicode方式编码》一文的配套代码。文章地址:http://blog.csdn.net/chaijunkun/article/details/8257209
本项目名为"MVP简单封装",主要目的是对MVP框架进行轻量级的封装,以方便开发者在实际项目中快速集成和使用。下面我们将详细探讨MVP架构及其在这个封装过程中的关键点。 **MVP架构介绍** MVP架构由三个核心组件组成...
Java调用Echarts3简单封装及示例 在Java开发中,Echarts作为一个强大的数据可视化库,被广泛用于创建各种图表。Echarts3是Echarts的第三个主要版本,提供了丰富的图表类型、美观的视觉效果以及良好的交互性。为了在...
在标签中提到了"jar",这意味着这是一个Java Archive文件,是Java平台的标准归档格式,用于封装多个类文件和其他资源。`jackson-annotations-2.2.3.jar`需要被添加到Java项目的类路径中,以便在运行时能够访问其中的...
在这个“json jackson 工具类”中,我们看到对Jackson进行了封装,以便更方便地进行字符串与JSON对象之间的转换,包括对简单对象和复杂对象的支持。 Jackson库主要由以下组件组成: 1. `...
最快的解析json的库 jackson 做简单的封装,似乎没有流传的那么复杂
本主题将深入探讨如何自封装一个Java HTTP客户端,使其变得简单易用,仅需三行代码就能完成请求并处理响应。这个自封装的客户端支持JSON、XML以及键值对等多种数据传输格式,大大提升了开发效率。 首先,我们需要...
在"Demo"项目中,可能包含了具体的示例代码,展示了如何将RxJava2.0和Retrofit2.0结合使用,实现一个简单的网络请求封装。通过查看这些代码,你可以更深入地理解这两者如何协同工作,以及如何在实际项目中应用。对于...
2. **Jackson工具类示例**:项目中封装好的工具类通常包含一系列静态方法,简化了常见的JSON操作。这些方法可能包括将Java对象转换为JSON字符串,从JSON字符串反序列化到Java对象,以及处理JSON片段等。例如,`...
标题提及的“json封装的jar包”通常是指包含有处理JSON的Java库,这类库可以帮助开发者方便地在Java程序中进行JSON对象的创建、解析、序列化和反序列化。描述中提到有6个常用的类或方法,这可能指的是这个jar包内...
这里以Jackson为例,介绍如何进行JSON数据的封装: 1. **引入依赖**:在你的项目中,需要添加Jackson的依赖。如果是Maven项目,在pom.xml中添加如下依赖: ```xml <groupId>...
总结,通过对Retrofit的简单封装,我们可以方便地管理网络请求,提高代码复用性,同时优化用户体验。在实际项目中,可以根据需求进一步扩展和定制化这些功能。通过RetrofitUtils-master这个项目,你可以更深入地学习...
Jackson2JsonRedisSerializer<Object> jsonSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect....
Retrofit2的主要优势在于其灵活性和强大的功能,包括支持多种网络请求方式(GET、POST等)、支持Gson、Jackson等JSON解析库以及自动管理请求回调。 为了实现极简封装,我们可以遵循以下步骤: 1. **创建基础配置**...
本篇文章将详细介绍如何在Android项目中封装一个基于BaseMvp的基础框架,并涵盖OkHttp的简单使用以及本地JSON文件的读取。 一、Android BaseMvp框架封装 1. **内存泄漏的预防**:内存泄漏是Android开发中的常见...
这通常会提供一个简单的方法来加载网络图片到ImageView: ```java MyVolley.loadImage(imageView, imageUrl); ``` 这种封装使得图片加载更加简便,同时可能会支持内存和磁盘缓存,避免频繁的网络请求。 ### 四、...
描述中提到的"springmvc进行Jason数据封装转化时可以即使用也是@responsebody",指的是在Spring MVC的控制器(Controller)中,我们可以使用`@ResponseBody`注解配合Jackson库,实现将Java对象直接转换为JSON格式的...
Make A Jackson 是一个很好的工具,可以帮助您设计 JSD(杰克逊结构化设计)图表。 与此程序一起,您可以为您的所有 Cobol 程序或任何其他程序语言创建一个简单、合乎逻辑的设计。
而本方案则旨在将ARouter与Retrofit2结合,提供一种更加便捷的使用方式,使得调用服务接口如同Retrofit2般简单。 ARouter的主要功能包括: 1. **组件化通信**:通过路径匹配,实现不同模块之间的解耦,使得各个模块...
综上所述,顺丰API接口封装的Java版本为开发者提供了便捷的物流服务集成手段,通过精心设计的接口,使得与顺丰系统的交互变得简单而高效。在实际应用中,开发者可以快速地实现下单、查询等功能,提升用户体验。