因为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);
}
}