package cn.edu.hbcf.common.jackjson;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Set; import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ser.FilterProvider;
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
import org.codehaus.jackson.type.JavaType;
import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* jackjson的一些转换方法
*
*/
public class JackJson {
private static final Logger logger = LoggerFactory.getLogger(JackJson.class);
/** 格式化时间的string */
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; /**
* jackjson把json字符串转换为Java对象的实现方法
*
* <pre>
* return JackJson.fromJsonToObject(this.answersJson, new TypeReference&lt;List&lt;StanzaAnswer&gt;&gt;() {
* });
* </pre>
*
* @param <T>
* 转换为的java对象
* @param json
* json字符串
* @param typeReference
* jackjson自定义的类型
* @return 返回Java对象
*/
public static <T> T fromJsonToObject(String json, TypeReference<T> typeReference) {
ObjectMapper mapper = new ObjectMapper();
try {
return (T)mapper.readValue(json, typeReference);
} catch (JsonParseException e) {
logger.error("JsonParseException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* json转换为java对象
*
* <pre>
* return JackJson.fromJsonToObject(this.answersJson, JackJson.class);
* </pre>
*
* @param <T>
* 要转换的对象
* @param json
* 字符串
* @param valueType
* 对象的class
* @return 返回对象
*/
public static <T> T fromJsonToObject(String json, Class<T> valueType) {
ObjectMapper mapper = new ObjectMapper();
try {
return (T)mapper.readValue(json, valueType);
} catch (JsonParseException e) {
logger.error("JsonParseException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* java对象转换为json字符串
*
* @param object
* Java对象
* @return 返回字符串
*/
public static String fromObjectToJson(Object object) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(object);
} catch (JsonGenerationException e) {
logger.error("JsonGenerationException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* java对象转换为json字符串
*
* @param object
* 要转换的对象
* @param filterName
* 过滤器的名称
* @param properties
* 要过滤哪些字段
* @return
*/
@SuppressWarnings("deprecation")
public static String fromObjectToJson(Object object, String filterName, Set<String> properties) {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept(properties));
try {
return mapper.filteredWriter(filters).writeValueAsString(object);
} catch (JsonGenerationException e) {
logger.error("JsonGenerationException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* java对象转换为json字符串
*
* @param object
* 要转换的对象
* @param filterName
* 过滤器的名称
* @param properties
* 要过滤的字段名称
* @return
*/
@SuppressWarnings("deprecation")
public static String fromObjectToJson(Object object, String filterName, String property) {
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter(filterName, SimpleBeanPropertyFilter.serializeAllExcept(property));
try {
return mapper.filteredWriter(filters).writeValueAsString(object);
} catch (JsonGenerationException e) {
logger.error("JsonGenerationException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* java对象(包含日期字段或属性)转换为json字符串
*
* @param object
* Java对象
* @return 返回字符串
*/
public static String fromObjectHasDateToJson(Object object) {
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().withDateFormat(new SimpleDateFormat(DATE_TIME_FORMAT));
try {
return mapper.writeValueAsString(object);
} catch (JsonGenerationException e) {
logger.error("JsonGenerationException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
} /**
* java对象(包含日期字段或属性)转换为json字符串
*
* @param object
* Java对象
* @param dateTimeFormatString
* 自定义的日期/时间格式。该属性的值遵循java标准的date/time格式规范。如:yyyy-MM-dd
* @return 返回字符串
*/
public static String fromObjectHasDateToJson(Object object, String dateTimeFormatString) {
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().withDateFormat(new SimpleDateFormat(dateTimeFormatString));
try {
return mapper.writeValueAsString(object);
} catch (JsonGenerationException e) {
logger.error("JsonGenerationException: ", e);
} catch (JsonMappingException e) {
logger.error("JsonMappingException: ", e);
} catch (IOException e) {
logger.error("IOException: ", e);
}
return null;
}
public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
ObjectMapper mapper = new ObjectMapper();
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
}

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. Win32 API UART编程

    下面是一个使用Win32 API进行UART编程的简单示例. #include <windows.h> #include <stdio.h> int WINAPI WinMai ...

  2. python wheel 包命名规则和 abi 兼容

    wheel 包的命名规定 wheel 包的命名格式为 {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform ...

  3. g++动态库静态库混合链接

    今天编译一个程序时报错: g++ -static -o echo.fcgi echo_adaptor.o echo.o -L/usr/local/lib/ -lfastcgipp -L/usr/lib ...

  4. [Android Pro] Android中全局Application的onCreate多次调用问题

    一般来说Application的onCreate方法只会执行一次, 如果应用中采用多进程方式,oncreate方法会执行多次,根据不同的进程名字进行不同的初始化, 就是在application中多添加 ...

  5. 云计算之路-阿里云上-新发现:又一种与虚拟内存有关的CPU波动情况

    在云上真是无奇不有,昨天偶然间发现在IIS的应用程序池回收设置中,仅仅设置了一下基于虚拟内存限制的回收,就引发了CPU有规律的波动.在这篇博文中,我们将向大家汇报一下云计算之路上的这个小发现. 在之前 ...

  6. 腾讯技术分享:Android版手机QQ的缓存监控与优化实践

    本文内容整理自公众号腾讯Bugly,感谢原作者的分享. 1.问题背景 对于Android应用来说,内存向来是比较重要的性能指标.内存占用过高,会影响应用的流畅度,甚至引发OOM,非常影响用户体验.因此 ...

  7. 学习EF之CodeFirst一

    最近将花点时间学习EF相关知识,通过文章来进行一个完整的学习,Code First是由先有代码后生成数据库:将通过一实例来进行学习:我们简单分为三层,其中DataLibrary为EF上下文处理层,Mo ...

  8. stylus

    stylus介绍 是个什么鬼?对于开发来说,CSS的弱点在于静态化.我们需要一个真正能提高开发效率的工具, LESS , SASS 都在这方面做了一些贡献. Stylus 是一个CSS的预处理框架,2 ...

  9. url 传值

    js获取url参数值: index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数 根据获取h ...

  10. GUID转换成16位字符串或19位唯一字符串

    整理几个经常使用GUID转换成16位字符串或19位唯一字符串方法: /// <summary> /// 依据GUID获取16位的唯一字符串 /// Author : 付义方 /// < ...