org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer 序列化和反序列化
package zwf;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
@Configuration
public class CustomJacksonConfig
{
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer()
{
return builder ->
{
SimpleModule module = new SimpleModule();
// 注册 BigDecimal 序列化器和反序列化器
module.addSerializer(BigDecimal.class, new BigDecimalSerializer());
module.addDeserializer(BigDecimal.class, new BigDecimalDeserializer());
// 注册 Long 序列化器
module.addSerializer(Long.class, new LongSerializer());
// 注册 BigInteger 序列化器和反序列化器
module.addSerializer(BigInteger.class, new BigIntegerSerializer());
module.addDeserializer(BigInteger.class, new BigIntegerDeserializer());
builder.modules(module);
};
}
static class BigDecimalSerializer extends JsonSerializer<BigDecimal>
{
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException
{
if (value != null)
{
gen.writeString(value.toPlainString());
}
else
{
gen.writeNull();
}
}
}
static class BigDecimalDeserializer extends JsonDeserializer<BigDecimal>
{
@Override
public BigDecimal deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
String value = p.getText();
return value != null && !value.isEmpty() ? new BigDecimal(value) : null;
}
}
static class LongSerializer extends JsonSerializer<Long>
{
@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException
{
if (value != null)
{
gen.writeString(value.toString());
}
else
{
gen.writeNull();
}
}
}
static class BigIntegerSerializer extends JsonSerializer<BigInteger>
{
@Override
public void serialize(BigInteger value, JsonGenerator gen, SerializerProvider serializers) throws IOException
{
if (value != null)
{
gen.writeString(value.toString());
}
else
{
gen.writeNull();
}
}
}
static class BigIntegerDeserializer extends JsonDeserializer<BigInteger>
{
@Override
public BigInteger deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
String value = p.getText();
return value != null && !value.isEmpty() ? new BigInteger(value) : null;
}
}
}