常见的序列化和反序列化操作
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.type.MapType;
import com.fasterxml.jackson.databind.type.TypeFactory;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author zongkx
*/
@Component
public class JacksonUtil {
private static ObjectMapper objectMapper ;
public JacksonUtil(ObjectMapper objectMapper){
this.objectMapper = objectMapper;
this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,true);//忽略反序列化的未知属性,等同于注解 @JsonIgnoreProperties(true)
}
// 序列化为 String
public static String toStr(Object o) throws JsonProcessingException {
return objectMapper.writeValueAsString(o);
}
// 反序列化为 java bean,也可以是 map等集合
public static<T> T toBean(String json,Class<T> beanClass) throws JsonProcessingException {
return objectMapper.readValue(json,beanClass);
}
// 反序列化为 List<Bean>,也可以是List<Map>
public static<T> List<T> toListBean(String json,Class<T> tClass) throws JsonProcessingException {
return objectMapper.readValue(json, new TypeReference<ArrayList<T>>() {});
}
// 反序列化为 Map<String,Bean>
public static <T> HashMap<String, T> toMapBean(String json, Class<T> tClass) throws JsonProcessingException {
TypeFactory typeFactory = objectMapper.getTypeFactory();
MapType mapType = typeFactory.constructMapType(HashMap.class,String.class, tClass);
HashMap<String, T> map = objectMapper.readValue(json, mapType);
return map;
}
// 特殊转换 (此处对objectMapper 最好使用新的实例,避免污染bean)
public static<T> T toBean(String json, Class<T> tClass, PropertyNamingStrategy strategy) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(strategy);
T t = objectMapper.readValue(json, tClass);
return t;
}
}