基礎注解使用
1、實作JsonSerializer接口
例:
public class MySerializerUtils extends JsonSerializer<Integer> {
@Override
public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
String statusStr = "";
switch (status) {
case 0:
statusStr = "建立狀态";
break;
}
jsonGenerator.writeString(statusStr);
}
}
2、添加注解
注:@JsonSerialize注解,主要應用于資料轉換,該注解作用在該屬性的getter()方法上。
①用在屬性上(自定義的例子)
@JsonSerialize(using = MySerializerUtils.class)
private int status;
②用在屬性上(jackson自帶的用法)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime sendTime;
③用在空對象上可以轉化
@JsonSerialize
public class XxxxxBody {
// 該對象暫無字段,直接new了傳回
}
架構層面的使用
jsonUtil工具類
實作json轉換時所有的null轉為“”
1、實作JsonSerializer類
public class CustomizeNullJsonSerializer {
public static class NullStringJsonSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("");
}
}
}
2、實作BeanSerializerModifier類
public class CustomizeBeanSerializerModifier extends BeanSerializerModifier {
@Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
BeanDescription beanDesc,
List<BeanPropertyWriter> beanProperties) {
for (int i = 0; i < beanProperties.size(); i++) {
BeanPropertyWriter writer = beanProperties.get(i);
if (isStringType(writer)) {
writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer());
}
}
return beanProperties;
}
/**
* 是否是String
*/
private boolean isStringType(BeanPropertyWriter writer) {
Class<?> clazz = writer.getType().getRawClass();
return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
}
}
3、工具類調用
public class JsonUtil {
//序列化時String 為null時變成""
private static ObjectMapper mapperContainEmpty = new ObjectMapper();
static {
mapperContainEmpty.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapperContainEmpty.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapperContainEmpty.setSerializerFactory(mapperContainEmpty.getSerializerFactory()
.withSerializerModifier(new CustomizeBeanSerializerModifier()));
}
/**
* 将對象轉換為Json串,針對String 類型 null 轉成""
*/
public static String toJsonContainEmpty(Object o) {
try {
return mapperContainEmpty.writeValueAsString(o);
} catch (IOException e) {
logger.error("render object to json error: {}", e.getMessage(), e);
throw new RuntimeException("render object to json error!", e);
}
}
}
附:jsonUtil完整代碼
/**
* json串和對象之間互相轉換工具類
*/
public class JsonUtil {
private static Logger logger = LoggerFactory.getLogger(JsonUtil.class);
private static ObjectMapper mapper = new ObjectMapper();
//序列化時String 為null時變成""
private static ObjectMapper mapperContainEmpty = new ObjectMapper();
static {
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapperContainEmpty.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapperContainEmpty.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapperContainEmpty.setSerializerFactory(mapperContainEmpty.getSerializerFactory()
.withSerializerModifier(new CustomizeBeanSerializerModifier()));
}
/**
* 将對象轉換為Json串
*/
public static String toJson(Object o) {
try {
return mapper.writeValueAsString(o);
} catch (IOException e) {
logger.error("render object to json error: {}", e.getMessage(), e);
throw new RuntimeException("render object to json error!", e);
}
}
/**
* 将對象轉換為Json串,針對String 類型 null 轉成""
*/
public static String toJsonContainEmpty(Object o) {
try {
return mapperContainEmpty.writeValueAsString(o);
} catch (IOException e) {
logger.error("render object to json error: {}", e.getMessage(), e);
throw new RuntimeException("render object to json error!", e);
}
}
/**
* 将Json串轉換為對象
*/
public static <T> T toObject(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (IOException e) {
logger.error("render json to object error: {}", e.getMessage(), e);
throw new RuntimeException("render json to object error!", e);
}
}
/**
* 将Json串轉換為List
*/
public static <T> List<T> toList(String json, Class<T> clazz) {
try {
JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, clazz);
return mapper.readValue(json, javaType);
} catch (IOException e) {
logger.error("render json to List<T> error: {}", e.getMessage(), e);
throw new RuntimeException("render json to List<T> error!", e);
}
}
/**
* 将Json串轉換為Map
*/
public static <K, V> Map<K, V> toMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
try {
JavaType javaType = mapper.getTypeFactory().constructParametricType(Map.class, clazzKey, clazzValue);
return mapper.readValue(json, javaType);
} catch (IOException e) {
logger.error("render json to Map<K, V> error: {}", e.getMessage(), e);
throw new RuntimeException("render json to Map<K, V> error!", e);
}
}
}