1、通用工具类
@Slf4j
@Component
public class JacksonUtils{
private final ObjectMapper mapper = new ObjectMapper();
/**
* json字符串转成list
*
* @param jsonString
* @param cls
* @return
*/
public <T> List<T> jsonToList(@NonNull String jsonString, Class<T> cls) {
try {
return mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false).readValue(jsonString, getCollectionType(List.class, cls));
} catch (JsonProcessingException e) {
String className = cls.getSimpleName();
log.error(" parse json {} to class {} error:{}", jsonString, className, e.getMessage());
}
return null;
}
/**
* json字符串转成 java对象
* @param jsonString
* @param cls
* @param <T>
* @return
*/
public <T> T jsonToJava(@NonNull String jsonString, Class<T> cls){
try {
return mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false).readValue(jsonString,cls);
} catch (JsonProcessingException e) {
String className = cls.getSimpleName();
log.error(" parse json {} to class {} error:{}", jsonString, className, e.getMessage());
}
return null;
}
/**
* java对象转成 json字符串
* @param cls
* @return
*/
public <T> String javaToJson(@NonNull T cls){
try {
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(cls);
} catch (JsonProcessingException e) {
log.error(" parse class {} to json error:{}", cls, e.getMessage());
}
return null;
}
/**
* 获取泛型的Collection Type
*
* @param collectionClass 泛型的Collection
* @param elementClasses 实体bean
* @return JavaType Java类型
*/
private JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}
}
2、 解决JSON中存在大字字母而造成反序列化失败问题
@Data
public class ParmsVo implements Serializable{
private static final long serialVersionUID = 1L;
@JsonProperty("Value")
private T value;
@JsonProperty("Type")
private int type;
@JsonProperty("Name")
private String name;
}
@JsonProperty:用于实体类的属性上,在反序列化的时候给属性重命名