pull/4/head
zhouyu 10 months ago
parent 80611cc7ab
commit 2ed9f5e576

@ -15,35 +15,46 @@ import java.text.SimpleDateFormat;
/**
* jackson
*/
// 使用lombok的@Slf4j注解用于自动生成日志相关的代码方便在类中记录各种操作相关的日志信息便于后续查看操作情况以及进行问题排查比如在序列化或反序列化出现错误时记录详细的错误信息。
@Slf4j
public class JsonUtil {
// 创建一个ObjectMapper对象ObjectMapper是Jackson库中用于处理JSON序列化和反序列化的核心类通过它可以将Java对象转换为JSON字符串也可以将JSON字符串转换为Java对象这里创建一个实例用于后续的相关操作。
private static ObjectMapper objectMapper = new ObjectMapper();
// 静态代码块在类加载时执行用于对ObjectMapper对象进行一系列的配置以满足特定的JSON处理需求。
static {
// 设置序列化时包含所有字段即不管字段是否为null都会将其列入进行JSON转换这样可以保证完整的对象结构信息能在JSON中体现与之对应的还有其他包含策略例如只包含非null字段等这里选择了总是包含所有字段的策略。
//所有字段都列入进行转换
objectMapper.setSerializationInclusion(JsonSerialize.Inclusion.ALWAYS);
// 取消默认将日期类型转换为时间戳形式的行为通常在JSON序列化时日期对象可能会被默认转换为时间戳从1970年1月1日00:00:00 UTC到该日期的毫秒数这里配置为false表示按照其他自定义的日期格式进行转换方便在JSON中呈现更直观的日期格式。
//取消默认转换timestamp形式
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
// 配置忽略空bean即没有属性值的Java对象转换为JSON时出现的错误在某些情况下如果尝试将一个没有任何属性值的空对象转换为JSON可能会抛出异常这里设置为false后遇到这种情况就不会抛出异常而是返回一个合适的表示比如空对象对应的JSON表示增强了程序的健壮性。
//忽略空bean转json的错误
objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
// 统一设置日期的格式通过传入一个SimpleDateFormat对象指定了日期格式为DateTimeUtil类中定义的标准格式"yyyy-MM-dd HH:mm:ss"),这样在序列化和反序列化涉及日期类型时,都会按照这个统一格式进行处理,便于前后端在日期格式上保持一致,避免因格式不一致导致的解析错误等问题。
//统一时间的格式
objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
// 配置忽略JSON中存在属性但对应的Java对象不存在该属性时的错误在反序列化JSON字符串为Java对象时如果JSON中有一些Java对象中未定义的额外属性默认情况下可能会抛出异常这里设置为false后就会忽略这些未知属性只对Java对象中定义的属性进行赋值提高了对不同JSON结构的兼容性。
//忽略json存在属性但是java对象不存在属性的错误
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES,false);
}
/**
*
* @param obj
* @param <T>
* @return
* JavaJSON
* nullnull
* null使ObjectMapperwriteValueAsStringJSONIOExceptionnull
*
* @param obj JSONJavaJavaObjectMapper
* @param <T> 便
* @return JSONnullnull
*/
public static <T> String obj2String(T obj){
if(obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
return obj instanceof String? (String) obj : objectMapper.writeValueAsString(obj);
} catch (IOException e) {
log.warn("parse object to string error",e);
return null;
@ -51,17 +62,20 @@ public class JsonUtil {
}
/**
* 便
* @param obj
* @param <T>
* @return
* obj2StringJavaJSONJSON便使JSON
* nullnull
* null使ObjectMapperwriterWithDefaultPrettyPrinterJSONIOExceptionnull
*
* @param obj JSONJavaJavaObjectMapper
* @param <T> 便
* @return JSONnullnullJSON便
*/
public static <T> String obj2StringPretty(T obj){
if(obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
return obj instanceof String? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (IOException e) {
log.warn("parse object to string error",e);
return null;
@ -69,11 +83,14 @@ public class JsonUtil {
}
/**
*
* @param str
* @param clazz
* @param <T>
* @return
* JSONJava
* StringUtils.isEmptynullJavaclazznullnull
* StringT使ObjectMapperreadValueclazzJSONJavaIOExceptionJSONnull
*
* @param str JSONJava
* @param clazz JavaObjectMapperJSONJava
* @param <T> Java便
* @return Javanullnull
*/
public static <T> T String2Obj(String str,Class<T> clazz){
if(StringUtils.isEmpty(str) || clazz == null){
@ -88,11 +105,14 @@ public class JsonUtil {
}
/**
*
* @param str
* @param typeReference
* @param <T>
* @return
* TypeReference
* TypeReferencenullnull
* TypeReferenceString使ObjectMapperreadValueTypeReferenceJSONJavaIOExceptionnull
*
* @param str JSON
* @param typeReference TypeReferenceJavaObjectMapperJSONJava
* @param <T> 便
* @return JavaTypeReferencenullnull
*/
public static <T> T Str2Obj(String str, TypeReference typeReference){
if(StringUtils.isEmpty(str) || typeReference == null){
@ -107,12 +127,15 @@ public class JsonUtil {
}
/**
*
* @param str
* @param collectionClass
* @param elementClasses
* @param <T>
* @return
* Java
* 使ObjectMappergetTypeFactoryconstructParametricTypecollectionClasselementClassesJavaType
* 使ObjectMapperreadValueJavaTypeJSONJavaIOExceptionnull
*
* @param str JSON
* @param collectionClass JavaList.classSet.class
* @param elementClasses JavaList<String>elementClassesString.class
* @param <T> 便
* @return Javanull
*/
public static <T> T Str2Obj(String str,Class<?> collectionClass,Class<?>... elementClasses){
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
@ -123,4 +146,4 @@ public class JsonUtil {
return null;
}
}
}
}
Loading…
Cancel
Save