文档章节

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

V
 ValSong
发布于 2017/09/06 22:31
字数 297
阅读 119
收藏 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
粉丝 0
博文 13
码字总数 8166
作品 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.1K
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

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
6
0
现场看路演了!

HiBlock
昨天
17
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
10
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
19
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部