最近发现后台返回给web端的数据中,有一些Long字段过长,导致前端js解析失精.需要在返回的实体类字段上加@JsonSerialize(using = ToStringSerializer.class)注解,过于繁琐.包括需要在返回的时间上 @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”),否则会返回时间戳.
通过jackson将全局转换,代码如下:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;
@Configuration
public class LongToStringConfig extends WebMvcConfigurationSupport {
/**
* 日期格式化
*/
@Value("${spring.jackson.data-format:yyyy-MM-dd HH:mm:ss}")
private String springJacksonDateFormat;
/**
* 时区
*/
@Value("${spring.jackson.time-zone:GMT+8}")
private String springJacksonTimeZone;
/**
* springboot
* 解决long、bigint转json丢失精度
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> 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);
// 时间格式化
objectMapper.setDateFormat(new SimpleDateFormat(springJacksonDateFormat));
objectMapper.setTimeZone(TimeZone.getTimeZone(springJacksonTimeZone));
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
}
用@Value("${spring.jackson.data-format:yyyy-MM-dd HH:mm:ss}")导入是为了防止后来者在yml中配置将其覆盖,这样更保险
希望对你有所帮助.