package com.foreverwin.mesnac.common.util;

import java.io.IOException;

import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.util.StringUtils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * 功能描述: 封装Jackson转换对象为json格式和反序列化为对象
 * 作者: Michael.Liu
 * 时间: 2020年10月23日 - 17:19:10
 */
public class JacksonUtil {

	private static ObjectMapper mapper = new ObjectMapper();
	
	// 对象转字符串
	public static <T> String objToString(T obj) {
		if (obj == null) {
			return null;
		}
		try {
			return (obj instanceof String) ? (String) obj : mapper.writeValueAsString(obj);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	// 字符串转对象
	@SuppressWarnings("unchecked")
	public static <T> T strToObject(String str, Class<T> clazz) {
		if (StringUtils.isEmpty(str) || clazz == null) {
			return null;
		}
		try {
			return clazz.equals(String.class) ? (T) str : mapper.readValue(str, clazz);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 字符串转换成JsonNode;
	 * @param str
	 * @return
	 */
	public static JsonNode strToJsonNode(String str) {
		if (StringUtils.isEmpty(str)) {
			return null;
		}
		try {
			return mapper.readTree(str);
		} catch (JsonProcessingException e) {
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}
}
