文档章节

jackson工具类json转list、json转map、json转bean、bean转json

V
 ValSong
发布于 2017/09/06 22:31
字数 297
阅读 164
收藏 2
package cn.com.valsong.framework.util;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Json工具类,基于Jackson实现
 * 
 * @author Val Song
 * @date Sep 4, 2017
 *
 */
public class JacksonUtils {

	/**
	 * 将对象转化成json
	 * 
	 * @param t
	 * @return
	 * @throws JsonProcessingException
	 */
	public static <T> String toJson(T t) throws JsonProcessingException {
		return OBJECT_MAPPER.get().writeValueAsString(t);
	}

	/**
	 * 将json转化成bean
	 * 
	 * @param json
	 * @param valueType
	 * @return
	 * @throws JsonParseException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	public static <T> T toEntity(String json, Class<T> valueType) throws IOException {
		return OBJECT_MAPPER.get().readValue(json, valueType);
	}

	/**
	 * 将json转化成List
	 * 
	 * @param json
	 * @param collectionClass
	 * @param elementClass
	 * @return
	 * @throws JsonParseException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	@SuppressWarnings("rawtypes")
	public static <T> List<T> toList(String json, Class<? extends List> collectionClass, Class<T> elementClass)
			throws IOException {
		JavaType javaType = OBJECT_MAPPER.get().getTypeFactory().constructCollectionType(collectionClass, elementClass);
		return OBJECT_MAPPER.get().readValue(json, javaType);
	}

	/**
	 * 将json转化成Map
	 * 
	 * @param json
	 * @param mapClass
	 * @param keyClass
	 * @param valueClass
	 * @return
	 * @throws JsonParseException
	 * @throws JsonMappingException
	 * @throws IOException
	 */
	@SuppressWarnings("rawtypes")
	public static <K, V> Map<K, V> toMap(String json, Class<? extends Map> mapClass, Class<K> keyClass,
			Class<V> valueClass) throws IOException {
		JavaType javaType = OBJECT_MAPPER.get().getTypeFactory().constructMapType(mapClass, keyClass, valueClass);
		return OBJECT_MAPPER.get().readValue(json, javaType);
	}

	// ################################################################################################################

	/**
	 * 禁止调用无参构造
	 * 
	 * @throws IllegalAccessException
	 */
	private JacksonUtils() throws AssertionError {
		throw new AssertionError("Can't create an instance!");
	}

	/**
	 * 使用ThreadLocal创建对象,防止出现线程安全问题
	 */
	private static final ThreadLocal<ObjectMapper> OBJECT_MAPPER = new ThreadLocal<ObjectMapper>() {
		@Override
		protected ObjectMapper initialValue() {
			ObjectMapper objectMapper = new ObjectMapper();
			objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略不存在的字段
			return objectMapper;
		}
	};

}

© 著作权归作者所有

共有 人打赏支持
V
粉丝 2
博文 17
码字总数 10814
作品 0
黄浦
程序员
私信 提问
[Json框架选型]Android开发中应该使用哪一种主流json框架?

前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson、FastJson、Jackson...

张明云
2016/08/08
0
0
json处理,json、object的相互转化

用 FastJson将Json转换Bean ,用Jackson或Gson将Bean 转FastJson 要求能够支持获取Object中的Object,即支持深层嵌套的Object解析,此外json、Object间的相互转换要快速。 参考:各个JSON技术...

刘阳0292
2017/07/09
0
0
springmvc-json小案例

controller类----------------------------- @Controller @RequestMapping(value="/emp") public class EmpAction { /* * 返回json数据 * 1.导入jar包:jackson-core-asl.jar jackson-mapper......

李永china
2016/05/18
78
0
有效选择七个关于 Java 的 JSON 开源类库

有效选择七个关于Java的JSON开源类库 April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-......

溪边九节
2014/04/19
12.5K
14
有效选择七个关于Java的JSON开源类库

April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-available-today.html) 简介 JSON是J......

无若
2014/04/19
0
1

没有更多内容

加载失败,请刷新页面

加载更多

sql根据日期查询,本周,本月,本年,今日相关统计

sql根据日期查询,本周,本月,本年,今日相关统计 昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, 时间字段 ,getdate()) = ...

BraveLN
26分钟前
2
0
Delphi 折叠代码编译变量$REGION

编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm1.Button1Click(Sender: TObject); var uStr: UnicodeString; begin {$REGION '显示uStr变量内容'} ......

dillonxiao
27分钟前
1
0
【更新】SyntaxEditor发布v2018.1,可共享相同代码库

SyntaxEditor最新版本下载 SyntaxEditor是一款强大的代码语法检验控件,采用了当今最前沿的代码编辑的技术,可以为你代码编辑提供强大的管理功能。最新版支持Visual Studio 2013和Windows 8...

电池盒
28分钟前
3
0
如何在基于Bytom开发过程中集成IPFS

本文介绍了基于Bytom开发过程中集成IPFS。 step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建bytom节点有很多方式,然后开启RPC调用模式。这里推荐用...

比原链Bytom
32分钟前
0
0
sqlyog注册码

sqlyog注册码 1.方式一 用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417 a56ea5da-f30b-4fb1-8a05-95f346a9b20b a0fe8645-3916-45d4-9976-cb6b88fecc6c b70d7f66-dac2-4462-......

dragon_tech
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部