對於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配置中加入自定義配置消息轉換器configureMessageConverters
,app
@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); } }