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());
}
}
}
结果