spring-boot中spring.jackson的ObjectMapper失效及解决办法

因为js不支持太长的Long类型,而我后端使用的是Long类型,所以我需要在将结果转换成json格式时全局的将Long类型转换成String类型。我使用的是继承ObjectMapper类,

//@Component
//public class CustomObjectMapper extends ObjectMapper {
//
//    public CustomObjectMapper() {
//        super();
//        SimpleModule simpleModule = new SimpleModule();
//        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
//        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
//        registerModule(simpleModule);
//    }
//}

刚开始时这个办法是有用的,后面我使用了拦截器,这个方法就失效了,失效的原因是我继承了这个WebMvcConfigurationSupport类,后面看了这篇博客
https://chenyongjun.vip/articles/101
受到启发,我就把这个转换的工作放到了拦截器的配置类中,代码如下:

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    /*
     * 拦截器配置,这是我注册的拦截器,使用时可以删除掉
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册自定义拦截器,添加拦截路径和排除拦截路径
        registry.addInterceptor(new MyInterceptor()) // 添加拦截器
                .addPathPatterns("/**") // 添加拦截路径
                .order(0);//执行顺序
        super.addInterceptors(registry);
    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters){
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = converter.getObjectMapper();
        // 生成JSON时,将所有Long转换成String
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
//        // 时间格式化
//        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//        objectMapper.setDateFormat(new SimpleDateFormat(DateUtil.PATTERN_TIME));
        // 设置格式化内容
        converter.setObjectMapper(objectMapper);
        converters.add(0, converter);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值