【jackson】Jackson 封裝工具類
阿新 • • 發佈:2022-05-06
1.pom.xml檔案
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId >jackson-annotations</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.3</version>
</dependency>
< dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.3</version>
</dependency>
2.核心類ObjectMapper註冊為單例的Bean
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class UtilConfig {
/**
* 單例物件對映器
* ObjectMapper 將jackson的這個核心類註冊為單例的Bean,防止在每一次序列化和反序列化時 new新的物件
* @return {@link ObjectMapper}
*/
@Bean
public ObjectMapper singletonObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();//可解決時間格式等一系列問題
return objectMapper;
}
}
3.JacksonUtil工具類
import cn.hutool.extra.spring.SpringUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* 傑克遜跑龍套
* 1.序列化類上,使用 @JsonInclude(JsonInclude.Include.NON_NULL) 序列化忽略所有null欄位
* 2.時間欄位上,使用 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 保持格式統一
* 3.序列化類上,必須提供無參構造方法!!
* 4.待續......
*
* @author xudong.shen
* @date 2022/05/06
*/
public class JacksonUtil {
/**
* 序列化為JSON字串
*
* @param obj obj
* @return {@link String}
*/
public static String toJsonString(Object obj) {
if (obj == null) return null;
ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class);
String result = null;
try {
result = mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return result;
}
/**
* 解析物件
* 反序列化為Object
*
* @param clazz clazz
* @param jsonStr json str
* @return {@link T}
*/
public static <T> T parseObject(String jsonStr, Class<T> clazz) {
if (StringUtils.isBlank(jsonStr) || clazz == null) return null;
ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class);
T t = null;
try {
t = mapper.readValue(jsonStr, clazz);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return t;
}
/**
* 解析List
* 反序列化為List集合
*
* @param clazz clazz
* @param listJsonStr 列表json str
* @return {@link List}<{@link T}>
*/
public static <T> List<T> parseList(String listJsonStr, Class<T> clazz) {
if (StringUtils.isBlank(listJsonStr) || clazz == null) return Collections.emptyList();
ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class);
List<T> list = Collections.emptyList();
try {
list = mapper.readValue(listJsonStr, List.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return list;
}
/**
* 解析Map
* 反序列化為Map集合
* @param mapJsonStr 地圖json str
* @param kClazz k clazz
* @param vClazz v clazz
* @return {@link Map}<{@link K}, {@link V}>
*/
public static <K,V> Map<K,V> parseMap(String mapJsonStr, Class<K> kClazz, Class<V> vClazz) {
if (StringUtils.isBlank(mapJsonStr) || kClazz == null || vClazz == null) return Collections.emptyMap();
ObjectMapper mapper = SpringUtil.getBean(ObjectMapper.class);
Map<K,V> map = Collections.EMPTY_MAP;
try {
map = mapper.readValue(mapJsonStr, mapper.getTypeFactory().constructParametricType(Map.class, kClazz, vClazz));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return map;
}
}
4.舉例子,如下這種複雜物件,都可以完成轉化
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Student {
private Integer id;
private String name;
private Long age;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
private Map<String,List<Student>> map;
}
一個完整的JSON示例字串:
{"1":{"id":1,"name":"德瑪西亞","time":"2022-05-06 17:53:01","map":{"第2組":[{"id":21,"name":"德瑪西亞21","time":"2022-05-06 17:53:01"},{"id":22,"name":"德瑪西亞22","time":"2022-05-06 17:53:01"},{"id":23,"name":"德瑪西亞23","time":"2022-05-06 17:53:01"}],"第1組":[{"id":11,"name":"德瑪西亞11","time":"2022-05-06 17:53:01"},{"id":12,"name":"德瑪西亞12","time":"2022-05-06 17:53:01"},{"id":13,"name":"德瑪西亞13","time":"2022-05-06 17:53:01"}]}},"2":{"id":2,"name":"德瑪西亞","time":"2022-05-06 17:53:01","map":{"第2組":[{"id":21,"name":"德瑪西亞21","time":"2022-05-06 17:53:01"},{"id":22,"name":"德瑪西亞22","time":"2022-05-06 17:53:01"},{"id":23,"name":"德瑪西亞23","time":"2022-05-06 17:53:01"}],"第1組":[{"id":11,"name":"德瑪西亞11","time":"2022-05-06 17:53:01"},{"id":12,"name":"德瑪西亞12","time":"2022-05-06 17:53:01"},{"id":13,"name":"德瑪西亞13","time":"2022-05-06 17:53:01"}]}}}