org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer

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;
		}
	}
}

BigDecimal 0E-8 BigDecimal.toPlainString()-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值