OrderDto orderDto = JsonUtil.json2Object(json,
     new TypeRef<OrderDto>() {
     });

package com.sf.module.bspcommon.util.json;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.TimeZone; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.sf.module.bspcommon.util.JsonException; /**
* 描述:JsonUtil工具类
*
* <pre>
* HISTORY
* ****************************************************************************
* ID DATE PERSON REASON
* 1 2015年3月7日 sfit0250 Create
* ****************************************************************************
* </pre>
*
* @author sfit0250
* @since 1.0
*/
public class JsonUtil { private static Logger logger = LoggerFactory.getLogger(JsonUtil.class); private static final ObjectMapper objectMapper;
/** 格式化时间的string */
private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
static {
objectMapper = new ObjectMapper();
// 去掉默认的时间戳格式
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
// 设置为中国北京时区
objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
objectMapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
// 空值不序列化
objectMapper.setSerializationInclusion(Include.NON_NULL);
// 反序列化时,属性不存在的兼容处理
objectMapper.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); // 序列化时,日期的统一格式
objectMapper.setDateFormat(new SimpleDateFormat(DATE_TIME_FORMAT)); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 单引号处理
objectMapper.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
} /**
* json 转换成 Object
*
* @param json
* @param clazz
* @return
*/
public static <T> T json2Object(String json, Class<T> clazz) {
try {
return objectMapper.readValue(json, clazz);
} catch (IOException e) {
logger.error("", e);
throw new RuntimeException("解析json错误");
}
} public static <T> T json2Object(String json, TypeRef<T> tr) {
try {
return (T)objectMapper.readValue(json, tr.getType());
} catch (IOException e) {
logger.error("", e);
throw new RuntimeException("解析json错误", e);
}
} /**
* obj 转换成json
*
* @param entity
* @return
*/
public static <T> String object2Json(T entity) {
try {
return objectMapper.writeValueAsString(entity);
} catch (IOException e) {
logger.error("", e);
throw new RuntimeException("转换json错误");
}
} /**
* obj对象 转换成树型JSON
*
* @param obj
* @return
*/
public static JsonNode object2TreeJson(Object obj) {
try {
return objectMapper.valueToTree(obj);
} catch (Exception e) {
logger.error("", e);
throw new RuntimeException("转换json错误");
}
} /**
* 解码json串成对象
*
* @param <T>
* @param json
* @param valueType
* @return T
*/
@SuppressWarnings("unchecked")
public static <T> T decode(String json, Class<?> valueType) {
try {
return (T) objectMapper.readValue(json, valueType);
} catch (Exception e) {
throw new JsonException(json, e);
}
}
// /**
// * 对象转换JSON 忽略指定属性
// * @param obj
// * @param pros 忽略属性名
// * @return
// */
// public static String object2JsonIgnoreProperties(Object obj, String...
// pros) {
// try {
// FilterProvider filters = new SimpleFilterProvider().addFilter(obj
// .getClass().getName(), SimpleBeanPropertyFilter
// .filterOutAllExcept(pros));
// objectMapper.setFilters(filters);
// objectMapper.setAnnotationIntrospector(new
// JacksonAnnotationIntrospector() {
// private static final long serialVersionUID = 1L;
//
// public Object findFilterId(AnnotatedClass ac) {
// return ac.getName();
// }
// });
// return objectMapper.writeValueAsString(obj);
// } catch (Exception e) {
// log.error(e);
// throw new RuntimeException("转换json错误");
// }
// } }

JsonUtil对象与json互转的更多相关文章

  1. java基础之泛型对象与json互转

    1. 场景描述 把泛型对象转成字符串放到缓存中,获取后使用有点问题,记录下,有碰到的朋友,参考下. 2. 解决方案 2.1 操作类及说明 /** * @auther: 软件老王 */ public s ...

  2. 使用Json-lib将对象和Json互转

    工程下载地址: https://files.cnblogs.com/files/xiandedanteng/jsonSample20200308.rar Depenency: <!-- 使用js ...

  3. java 对象与json互转

    有时为了项目需求,会将对象数据转换成json数据,以下是个人根据项目需求实现的方法. 项目中需要将数据格式: [{ "node": "0", "ind ...

  4. java对象与json互转

    package com.liveyc; import java.io.StringWriter; import org.junit.Test; import com.fasterxml.jackson ...

  5. fastjson 对象和json互转

    list转json List<Openid> openids = od.getAll(session); String json = JSONObject.toJSONString(ope ...

  6. Jackson 对象与json数据互转工具类JacksonUtil

    1,User对象 package com.st.json; import java.util.Date; /** * @Description: JSON序列化和反序列化使用的User类 * @aut ...

  7. JSONUtil(JAVA对象/List与json互转,xml与json互转)

    package com.chauvet.utils.json; import java.io.BufferedReader; import java.io.File; import java.io.F ...

  8. Jackson实现Object对象与Json字符串的互转

    在项目开发过程中,当客户端与服务器响应时,数据交互是必不可少的.然而通过Json实现数据交互成为我们开发中的一部分,进而Jackson为我们的Json转化提供了很好的机制.下面我将利用实例总结如何使用 ...

  9. fastjson对象,JSON,字符串,map之间的互转

    1.对象与字符串之间的互转 将对象转换成为字符串 String str = JSON.toJSONString(infoDo); 字符串转换成为对象 InfoDo infoDo = JSON.pars ...

随机推荐

  1. poj2749

    万变不离其宗 只要搞清楚题目的基本模型 搞清楚边是一种推导出的关系 搞清楚里面的逻辑关系 那就没什么难的了…… 二分+sat,没什么好说的 ; type node=record point,next: ...

  2. [HDU 1254] 推箱子

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  3. sqliteExpert软件使用(创建数据库和表)

    sqliteExpert是sqlite数据库的可视化操作软件,通过该软件可以进行可视化的创建数据库以及表,免去了复杂的建表语句.首先在下面地址下载该软件http://www.ddooo.com/sof ...

  4. 从头开始编写一个Orchard网上商店模块(3) - 创建Orchard.Webshop模块项目

    原文地址:http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-par ...

  5. 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是介绍两个最常用的jQuery插件. 分别用 ...

  6. Servlet3.0学习总结(四)——使用注解标注监听器(Listener)

    Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了. 下面我 ...

  7. hibernate之参数绑定

    hibernate之参数绑定 ---------- 我们应该拒绝SQL(或HQL)的拼装,应该永远不要编写这样的代码,有这很严重的安全问题,众所周知的SQL注入.我们可以考虑参数绑定,在hiberna ...

  8. 【转】傅里叶变换 拉普拉斯变 z变换 DFT DCT意义

    傅里叶变换在物理学.数论.组合数学.信号处理.概率论.统计学.密码学.声学.光学.海洋学.结构动力学等领域都有着广泛的应用(例如在信号处理中,傅里叶变换的典型用途是将信号分解成幅值分量和频率分量). ...

  9. 【原】Spark中Job如何划分为Stage

    版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Job的提交 http://www.cnblogs.com/yourarebest/p/5342404.html 1.Spark中 ...

  10. 【CSS】Beginner3:Color

    1.red rgb(255,0,0) rgb(100%,0%,0%) #ff0000 #f00 2.Predefined color name aqua, black, blue, fuchsia, ...