
com.github.anonymousmister.bootfastconfig.jackson.BaseSimpleAnnotationJson Maven / Gradle / Ivy
package com.github.anonymousmister.bootfastconfig.jackson;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.JsonStreamContext;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder;
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.github.anonymousmister.bootfastconfig.expand.AnnotationJson;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.List;
/**
* @author misterzhang
*/
public abstract class BaseSimpleAnnotationJson implements AnnotationJson {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public void updateBuilder(DeserializationConfig config,
BeanDescription beanDesc,
BeanDeserializerBuilder builder,
SettableBeanProperty settableBeanProperty, T annotation) {
SettableBeanProperty newSettableBeanProperty = settableBeanProperty.withValueDeserializer(
new JsonDeserializer() {
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return deserializ(p, settableBeanProperty, annotation);
}
});
builder.addOrReplaceProperty(newSettableBeanProperty, true);
}
public Object deserializ(JsonParser p, SettableBeanProperty settableBeanProperty, T annotation) throws IOException {
Class> rawClass = settableBeanProperty.getType().getRawClass();
Object o = objectMapper.readValue(p, rawClass);
if (o instanceof String) {
String a = ((String) o);
while (a.startsWith("\"")) {
a = a.substring(1, a.length()).trim();
}
while (a.endsWith("\"")) {
a = a.substring(0, a.length() - 1).trim();
}
o = a;
}
JsonStreamContext parsingContext = p.getParsingContext();
return deserialize(parsingContext != null ? parsingContext.getCurrentValue() : null, parsingContext != null ? parsingContext.getCurrentName() : null, o, annotation);
}
;
/**
* 反序列化
*
* @param object
* @param name
* @param value
* @param annotation
* @return
*/
public abstract Object deserialize(Object object, String name, Object value, T annotation) throws JsonProcessingException;
/**
* 序列化
*
* @param object
* @param name
* @param value
* @param annotation
* @return
* @throws JsonProcessingException
*/
@Override
public abstract Object serialization(Object object, String name, Object value, T annotation);
public String serialization(JsonGenerator jsonGenerator, Object o, T annotation) throws JsonProcessingException {
JsonStreamContext outputContext = jsonGenerator.getOutputContext();
Object serialization = serialization(outputContext != null ? outputContext.getCurrentValue() : null, outputContext != null ? outputContext.getCurrentName() : null, o, annotation);
if (serialization instanceof String) {
return (String) serialization;
}
return serialization == null ? null : objectMapper.writeValueAsString(serialization);
}
;
@Override
public void changeProperties(SerializationConfig config,
BeanDescription beanDesc,
List beanProperties,
BeanPropertyWriter writer, T annotation) {
writer.assignSerializer(new JsonSerializer
© 2015 - 2025 Weber Informatics LLC | Privacy Policy