近期碰到一个接口调用前端一直渲染不了数据的问题,经过定位发现是返回结果中少了右括号,怀疑可能是数据json转化有问题,具体是哪个字符通过排除法发现是中间有一个BigDecimal对象,前端接收的是一个科学计数法,可能造成了解析问题。最终通过增加FastJsonConfig 配置解决,解决的思路是其中的BigDecimal不做科学计数法转化。
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(SerializerFeature.WriteBigDecimalAsPlain);
converter.setFastJsonConfig(config);
return converter;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(fastJsonHttpMessageConverter());
}
}
上述方法也可以处理因为BigDecimal对象转成科学计数法导致的 Content-length 对应不上,而被前端主动断开连接的问题。