spring boot中使用@ResponseBody註解返回json時Long精度丟失

spring boot中使用@ResponseBody註解返回json時Long精度丟失

1.現象

對於Long 類型的數據,若是咱們在Controller層經過@ResponseBody將返回數據自動轉換成json時,不作任何處理,而直接傳給前端的話,在Long長度大於17位時會出現精度丟失的問題。前端

二、簡單分析

@responseBody 註解的做用是將controller的方法返回的對象經過適當的轉換器(默認使用MappingJackson2HttpMessageConverte 轉換爲指定的格式以後,寫入到response對象的body區,須要注意的是,在使用此註解以後不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於經過response對象輸出指定格式的數據,做用等同於 response.getWriter.write(JSONObject.fromObject(user).toString());java

三、怎麼處理

總的來講主要有兩種處理方式,最經常使用的辦法就是待轉化的字段統一轉成String類型web

通常有兩種方式:首先咱們要在maven中添加必須的依賴spring

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>版本號</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>版本號</version>
        </dependency>
方式一.

在待轉化的字段之上加上@JsonSerialize(using=ToStringSerializer.class)註解,如圖所示:json

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProductVo {

    @JsonSerialize(using=ToStringSerializer.class)
    private Long productId

    private String productName;
    get,set省略
方式二.

在webconfig配置中加入自定義配置消息轉換器configureMessageConvertersapp

@Component
class WebConfigurer extends WebMvcConfigurationSupport {
    /**
     * 序列換成json時,將全部的long變成string
     * 由於js中得數字類型不能包含全部的java long值
     */
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        converters.add(jackson2HttpMessageConverter);
    }
}
相關文章
相關標籤/搜索