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. [转]SSIS Recordset Destination

    本文转自:http://www.sqlis.com/sqlis/post/Shredding-a-Recordset.aspx Doing what to a recordset? Shredding ...

  2. SQL_MODE设置讲解

    SQL_MODE可能是比较容易让开发人员和DBA忽略的一个变量,默认为空.SQL_MODE的设置其实是比较冒险的一种设置,因为在这种设置下 可以允许一些非法操作,比如可以将NULL插入NOT NULL ...

  3. Unity3D新手教学,让你十二小时,从入门到掌握!(二) [转]

    版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ531193915 继续上一讲的内容,首先呢, 为了接下来要做的小游戏,在这里我要小小的修改一下移动的代码. ...

  4. Maven Web项目配置Mybatis

    一.添加Mybatis和数据库相关的包 1 pom.xml中添加的包有mybatis,mybatis-spring,druid,MySQL-connector-Java,commons-io,refl ...

  5. Linux环境下搭建MYSQL数据库指令详情

    一.mysql数据库的安装 确保安装gcc(开发工具) #groupadd mysql #useradd -g mysql mysql #cd /usr/local # tar -zxvf mysql ...

  6. Node.js mm131图片批量下载爬虫1.00 iconv协助转码

    //====================================================== // mm131图片批量下载爬虫1.00 // 2017年11月15日 //===== ...

  7. 关于comet

    Comet是彗星的意思,这一技术之所以借用这个名字,是因为这里的每一次请求都有一个长长的“尾巴”.这个长尾巴就是我们感兴趣的长连接. 因为长连接的实现,Comet可以不需要安装浏览器插件就可以向客户端 ...

  8. HTTP缓存策略 304

    1.图解缓存 示例: 200 (from disk cache): 200 (from memory cache) MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载 ...

  9. 一个基于node express4.0和mongodb的活动报名

    代码放在code.csdn.net上了,详细https://code.csdn.net/qazwsx2345/node_activity/tree/master git clone git@code. ...

  10. proxool连接池参数解释

        数据库连接池概述: 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个 应用程序的伸缩性和健壮性,影响到程序的性能指标.数 ...