java重写JSONobject_springboot~重写json序列化方式

本文介绍了如何在SpringBoot中通过实现WebMvcConfigurer接口并重写configureMessageConverters方法来自定义JSON输出格式。示例中,将Long转换为String以避免精度丢失,对BigDecimal和Double类型的数据进行格式化,保留指定小数位数。
摘要由CSDN通过智能技术生成

在springboot里,推荐我们通过WebMvcConfigurer的派生类重写你的请求,你可以利用WebMvcConfigurer对http请求添加一些拦截器,addCorsMappings,addResourceHandlers,消息返回格式等等,需要注意的是,你需要使用@EnableWebMvc注解override springboot默认的方法;WebMvcConfigurer虽然是接口,但它的方法都是有default默认实现的。

public interface WebMvcConfigurer {

default void configurePathMatch(PathMatchConfigurer configurer) {

}

default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

}

default void configureAsyncSupport(AsyncSupportConfigurer configurer) {

}

...

}

我们来定义自己的WebMvcConfigurer,并且重写一个JSON输出的格式

@Configuration

@EnableWebMvc //覆盖默认的配置

public class WebMvcConfigurerImpl implements WebMvcConfigurer {

@Override

public void configureMessageConverters(List> converters) {

MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

ObjectMapper objectMapper = new ObjectMapper();

/**

* 序列换成Json时,将所有的Long变成String

* 因为js中得数字类型不能包括所有的java Long值

*/

SimpleModule simpleModule = new SimpleModule();

simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

// 所有的double类型返回保留三位小数

simpleModule.addSerializer(BigDecimal.class, new MoneySerialize());

// double保留两位小数

simpleModule.addSerializer(Double.class, new DoubleSerialize());

simpleModule.addSerializer(Double.TYPE, new DoubleSerialize());

objectMapper.registerModule(simpleModule);

jackson2HttpMessageConverter.setObjectMapper(objectMapper);

converters.add(jackson2HttpMessageConverter);

}

/**

* money serializer.

*/

public class MoneySerialize extends JsonSerializer {

//修改要除的数据

final BigDecimal TEMP = BigDecimal.valueOf(1000000L);

@Override

public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {

if (value != null) {

BigDecimal bigDecimal = new BigDecimal(value.toString());

gen.writeNumber(bigDecimal.divide(TEMP, 4, RoundingMode.DOWN));

}

}

}

/**

* double serializer.

*/

public class DoubleSerialize extends JsonSerializer {

private DecimalFormat df = new DecimalFormat("##.00");

@Override

public void serialize(Double value, JsonGenerator gen, SerializerProvider serializers)

throws IOException, JsonProcessingException {

if (value != null) {

gen.writeString(df.format(value));

}

}

}

然后我们在返回对象之后,它的double,BigDecimal的属性将被格式化

{"name":"zzl","email":null,"sex":null,"total":"5.00","totalMoney":0.0001}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值