1. package cn.edu.hbcf.common.jackjson;
  2.  
  3. import java.io.IOException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Set;
  6.  
  7. import org.codehaus.jackson.JsonGenerationException;
  8. import org.codehaus.jackson.JsonParseException;
  9. import org.codehaus.jackson.map.JsonMappingException;
  10. import org.codehaus.jackson.map.ObjectMapper;
  11. import org.codehaus.jackson.map.ser.FilterProvider;
  12. import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
  13. import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
  14. import org.codehaus.jackson.type.JavaType;
  15. import org.codehaus.jackson.type.TypeReference;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18.  
  19. /**
  20. * jackjson的一些转换方法
  21. *
  22. */
  23. public class JackJson {
  24. private static final Logger logger = LoggerFactory.getLogger(JackJson.class);
  25. /** 格式化时间的string */
  26. private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
  27.  
  28. /**
  29. * jackjson把json字符串转换为Java对象的实现方法
  30. *
  31. * <pre>
  32. * return JackJson.fromJsonToObject(this.answersJson, new TypeReference&lt;List&lt;StanzaAnswer&gt;&gt;() {
  33. * });
  34. * </pre>
  35. *
  36. * @param <T>
  37. * 转换为的java对象
  38. * @param json
  39. * json字符串
  40. * @param typeReference
  41. * jackjson自定义的类型
  42. * @return 返回Java对象
  43. */
  44. public static <T> T fromJsonToObject(String json, TypeReference<T> typeReference) {
  45. ObjectMapper mapper = new ObjectMapper();
  46. try {
  47. return (T)mapper.readValue(json, typeReference);
  48. } catch (JsonParseException e) {
  49. logger.error("JsonParseException: ", e);
  50. } catch (JsonMappingException e) {
  51. logger.error("JsonMappingException: ", e);
  52. } catch (IOException e) {
  53. logger.error("IOException: ", e);
  54. }
  55. return null;
  56. }
  57.  
  58. /**
  59. * json转换为java对象
  60. *
  61. * <pre>
  62. * return JackJson.fromJsonToObject(this.answersJson, JackJson.class);
  63. * </pre>
  64. *
  65. * @param <T>
  66. * 要转换的对象
  67. * @param json
  68. * 字符串
  69. * @param valueType
  70. * 对象的class
  71. * @return 返回对象
  72. */
  73. public static <T> T fromJsonToObject(String json, Class<T> valueType) {
  74. ObjectMapper mapper = new ObjectMapper();
  75. try {
  76. return (T)mapper.readValue(json, valueType);
  77. } catch (JsonParseException e) {
  78. logger.error("JsonParseException: ", e);
  79. } catch (JsonMappingException e) {
  80. logger.error("JsonMappingException: ", e);
  81. } catch (IOException e) {
  82. logger.error("IOException: ", e);
  83. }
  84. return null;
  85. }
  86.  
  87. /**
  88. * java对象转换为json字符串
  89. *
  90. * @param object
  91. * Java对象
  92. * @return 返回字符串
  93. */
  94. public static String fromObjectToJson(Object object) {
  95. ObjectMapper mapper = new ObjectMapper();
  96. try {
  97. return mapper.writeValueAsString(object);
  98. } catch (JsonGenerationException e) {
  99. logger.error("JsonGenerationException: ", e);
  100. } catch (JsonMappingException e) {
  101. logger.error("JsonMappingException: ", e);
  102. } catch (IOException e) {
  103. logger.error("IOException: ", e);
  104. }
  105. return null;
  106. }
  107.  
  108. /**
  109. * java对象转换为json字符串
  110. *
  111. * @param object
  112. * 要转换的对象
  113. * @param filterName
  114. * 过滤器的名称
  115. * @param properties
  116. * 要过滤哪些字段
  117. * @return
  118. */
  119. @SuppressWarnings("deprecation")
  120. public static String fromObjectToJson(Object object, String filterName, Set<String> properties) {
  121. ObjectMapper mapper = new ObjectMapper();
  122. FilterProvider filters = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept(properties));
  123. try {
  124. return mapper.filteredWriter(filters).writeValueAsString(object);
  125. } catch (JsonGenerationException e) {
  126. logger.error("JsonGenerationException: ", e);
  127. } catch (JsonMappingException e) {
  128. logger.error("JsonMappingException: ", e);
  129. } catch (IOException e) {
  130. logger.error("IOException: ", e);
  131. }
  132. return null;
  133. }
  134.  
  135. /**
  136. * java对象转换为json字符串
  137. *
  138. * @param object
  139. * 要转换的对象
  140. * @param filterName
  141. * 过滤器的名称
  142. * @param properties
  143. * 要过滤的字段名称
  144. * @return
  145. */
  146. @SuppressWarnings("deprecation")
  147. public static String fromObjectToJson(Object object, String filterName, String property) {
  148. ObjectMapper mapper = new ObjectMapper();
  149. FilterProvider filters = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept(property));
  150. try {
  151. return mapper.filteredWriter(filters).writeValueAsString(object);
  152. } catch (JsonGenerationException e) {
  153. logger.error("JsonGenerationException: ", e);
  154. } catch (JsonMappingException e) {
  155. logger.error("JsonMappingException: ", e);
  156. } catch (IOException e) {
  157. logger.error("IOException: ", e);
  158. }
  159. return null;
  160. }
  161.  
  162. /**
  163. * java对象(包含日期字段或属性)转换为json字符串
  164. *
  165. * @param object
  166. * Java对象
  167. * @return 返回字符串
  168. */
  169. public static String fromObjectHasDateToJson(Object object) {
  170. ObjectMapper mapper = new ObjectMapper();
  171. mapper.getSerializationConfig().withDateFormat(new SimpleDateFormat(DATE_TIME_FORMAT));
  172. try {
  173. return mapper.writeValueAsString(object);
  174. } catch (JsonGenerationException e) {
  175. logger.error("JsonGenerationException: ", e);
  176. } catch (JsonMappingException e) {
  177. logger.error("JsonMappingException: ", e);
  178. } catch (IOException e) {
  179. logger.error("IOException: ", e);
  180. }
  181. return null;
  182. }
  183.  
  184. /**
  185. * java对象(包含日期字段或属性)转换为json字符串
  186. *
  187. * @param object
  188. * Java对象
  189. * @param dateTimeFormatString
  190. * 自定义的日期/时间格式。该属性的值遵循java标准的date/time格式规范。如:yyyy-MM-dd
  191. * @return 返回字符串
  192. */
  193. public static String fromObjectHasDateToJson(Object object, String dateTimeFormatString) {
  194. ObjectMapper mapper = new ObjectMapper();
  195. mapper.getSerializationConfig().withDateFormat(new SimpleDateFormat(dateTimeFormatString));
  196. try {
  197. return mapper.writeValueAsString(object);
  198. } catch (JsonGenerationException e) {
  199. logger.error("JsonGenerationException: ", e);
  200. } catch (JsonMappingException e) {
  201. logger.error("JsonMappingException: ", e);
  202. } catch (IOException e) {
  203. logger.error("IOException: ", e);
  204. }
  205. return null;
  206. }
  207. public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
  208. ObjectMapper mapper = new ObjectMapper();
  209. return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
  210. }
  211. }

JackJson的一些方法的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. JSON以及Java转换JSON的方法(前后端常用处理方法)

    )); map.put("arr", new String[] { "a", "b" }); map.put("func" ...

  3. Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson

    Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...

  4. 分享知识-快乐自己:spring_Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson

    心路历程: 在Controller中return 对象的时候,对象中的属性值中文部分在浏览器中 显示为问号?? 然后结果是这样的:?? 尝试排查原因: 中文乱码常有以下三种: 1.request.re ...

  5. JSON以及Java转换JSON的方法(前后端经常使用处理方法)

    本文主要讲述例如以下几个内容: 1.JSON定义以及JSON的特性 2.怎样在JavaScript中解释JSON格式数据 3.怎样在Java代码中使用JSON(讲对象转换成JSON对象以及解释JSON ...

  6. springboot2.0入门(三)----定义编程风格+jackjson使用+postMan测试

    一.RESTFul风格API 1.优点: )看Url就知道要什么资源 )看http method就知道针对资源干什么 )看http status code就知道结果如何 HTTP方法体现对资源的操作: ...

  7. JPA 一对多双向映射 结果对象相互迭代 造成堆栈溢出问题方法

    问题: JPA 在双向映射时,会相互包含对方的实例,相互引用,造成递归迭代,堆栈溢出(java.lang.StackOverflowError). 分析: 在后端向前端传递的时候会将数据序列化,转为j ...

  8. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  9. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

随机推荐

  1. iOS:详解MJRefresh刷新加载更多数据的第三方库

    原文链接:http://www.ios122.com/2015/08/mjrefresh/ 简介 MJRefresh这个第三方库是李明杰老师的杰作,这个框架帮助我们程序员减轻了超级多的麻烦,节约了开发 ...

  2. RMAN 还原与恢复

    一. RMAN 还原与恢复基础 在RMAN 用于中,还原与恢复是两个不同的概念.还原(restore):指访问先前生成的备份,从中得到一个或多个对象,然后在磁盘上的某个位置还原这些对象.恢复(reco ...

  3. 阿里云ECS主机内核调优

    #阿里云内核调优 cat /etc/sysctl.conf vm.swappiness = 0net.ipv4.neigh.default.gc_stale_time=120 # see detail ...

  4. 2017.12.27 sqlSessionFactory和sqlSession(to be continued)

    参考来自:<深入浅出MyBatis技术原理与实践-第6章 > 1.SqlSessionFactory SqlSessionFactory是一个接口,最重要的功能是提供SqlSession. ...

  5. 一般源码安装添加的GD库 是不支持 jpeg 格式的图片的

    一般源码安装添加的GD库 是不支持 jpeg 格式的图片的,只支持如下格式 GD Support enabled GD Version bundled (2.0.34 compatible) GIF ...

  6. [Angular] Improve Server Communication in Ngrx Effects with NX Data Persistence in Angular

    Communicating with a remote server via HTTP presents an extra level of complexity as there is an inc ...

  7. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何在同一台PC上运行多个TwinCAT程序

    右击桌面右下角的TC2图标,切换到PLC Configuration,然后在Plc Settings中设置数量为4(TC2最多可以运行的数量是4个),然后点击Apply   可能需要输入登录用户名和密 ...

  8. ssl证书之certbot

    一.安装 1.下载压缩包:#wget https://github.com/certbot/certbot/archive/master.zip 2.解压包 3.官方文档https://github. ...

  9. C++11: reference_wrapper

    https://oopscenities.net/2012/08/09/reference_wrapper/ Look at this piece of code: 1 2 3 4 5 6 7 8 9 ...

  10. 【Spring实战】—— 6 内部Bean

    本篇文章讲解了Spring的通过内部Bean设置Bean的属性. 类似内部类,内部Bean与普通的Bean关联不同的是: 1 普通的Bean,在其他的Bean实例引用时,都引用同一个实例. 2 内部B ...