Json数据和Object之间的转换

在javaweb开发中经常需要把java类和JSON数据进行转换

封装测试类

public class JsonUtil {
	private static String DataFormat ="yyyy-MM-dd HH:mm:ss";
	private static ObjectMapper objectMapper = new ObjectMapper();
	static{
		//对象所以字段
		objectMapper.setSerializationInclusion(Include.ALWAYS);
		//取消默认时间戳
		objectMapper.configure(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS, false);
		//取消空bean错误
		objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false);
		//统一日期格式
		objectMapper.setDateFormat(new SimpleDateFormat(DataFormat));
		//忽略json字符串没有对应java类型错误
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		
	}
	public static <T>String obj2String(T object){//java类转换JSON
		if(object==null){
			return null;
		}
		try {
		if(object instanceof String){//判断java类是否是字符串 并返回
			return String(object)
		}
		else{
			return objectMapper.writeValueAsString(object);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	//同上是JSON数据有排版 
	public static <T>String obj2StringPretty(T object){
		if(object==null){
			return null;
		}
		try {
			if(object instanceof String){//判断java类是否是字符串 并返回
			return String(object)
		}
		else{
			return  objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static <T> T String2obj(String str,Class<T> clazz){//JSON转java
		if(StringUtils.isEmpty(str) || clazz == null){
			return null;
		}
		try {
			return (T) (clazz.equals(String.class) ? str:objectMapper.readValue(str,clazz));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	//类型为List<?> Map 等集合类的情况
	public static <T> T String2obj(String str,TypeReference<T> typeReference){
		if(StringUtils.isEmpty(str) || typeReference == null){
			return null;
		}
		try {
			return (T) (typeReference.getType().equals(String.class) ? str:objectMapper.readValue(str,typeReference));//三元运算
		} catch (Exception e) {
			
			e.printStackTrace();
			
			return null;
		}
		
	}
	//同上解决复合类型的JSON转换java类
	public static <T> T String2obj(String str,Class<?>collection,Class<?>...emClasses){
		JavaType javatype = objectMapper.getTypeFactory().constructParametricType(collection, emClasses);
		try {
			return objectMapper.readValue(str,javatype);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		
	}
	public static void main(String args[]){//测试工具类
		User user = new User();
		user.setUsername("hhhhhhb");
		user.setId(1);
		User u1 = new User();
		u1.setPassword("dkfsak");
		u1.setUsername("das");
		List<User> list = new ArrayList<>();
		list.add(user);
		list.add(u1);
		String userJson = JsonUtil.obj2StringPretty(list);
		System.out.println(userJson);
		List<User> list2 = JsonUtil.String2obj(userJson,List.class,User.class);
		for(User u:list2){
			System.out.println(u.getUsername());
		}
		
		
	}
}

结果Json数据和Object之间的转换