Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
2017-10-10 15:07
639 查看
方法一 jackson注解
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency>
package com.paascloud.helper; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /** * Long 类型字段序列化时转为字符串,避免js丢失精度 */ public class LongJsonSerializer extends JsonSerializer<Long> { /** * Serialize. * * @param value the value * @param jsonGenerator the json generator * @param serializerProvider the serializer provider * * @throws IOException the io exception */ @Override public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { String text = (value == null ? null : String.valueOf(value)); if (text != null) { jsonGenerator.writeString(text); } } }
package com.paascloud.helper; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; /** * 将字符串转为Long */ public class LongJsonDeserializer extends JsonDeserializer<Long> { private static final Logger logger = LoggerFactory.getLogger(LongJsonDeserializer.class); /** * Deserialize long. * * @param jsonParser the json parser * @param deserializationContext the deserialization context * * @return the long * */ @Override public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) { String value = null; try { value = jsonParser.getText(); } catch (IOException e) { e.printStackTrace(); } try { return value == null ? null : Long.parseLong(value); } catch (NumberFormatException e) { logger.error("解析长整形错误", e); return null; } } }
@Data public class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @JsonSerialize(using = LongJsonSerializer.class) @JsonDeserialize(using = LongJsonDeserializer.class) private Long id; }
发现在List中还有问题
方法二
<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client --> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.1.0-incubating</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
@Bean public ObjectMapper ObjectMapper(){ SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); ObjectMapper objectMapper = new ObjectMapper() .registerModule(new ParameterNamesModule()) .registerModule(new Jdk8Module()) .registerModule(new JavaTimeModule()) .registerModule(simpleModule); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // Seriali bbcf zerProvider serializerProvider = objectMapper.getSerializerProvider(); // serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() { // @Override // public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { // jsonGenerator.writeString(""); // } // // }); return objectMapper; }
小坑一个记录一下, 解决现有问题
相关文章推荐
- 关于java中long类型的数据转换json传到前台时丢失精度问题的解决办法
- springboot解决Long类型数据传入前端损失精度
- 关于数据序列化(5),定制FastJSON序列化(解决Java大Long类型js的Number接收丢失数据的问题,不序列化某些属性)
- Spring boot处理Long类型的Json数据,前端调用精度丢失
- 解决Java中Long类型转换成Json时,在Js代码调用时精度丢失的问题
- java中double类型数据加减操作精度丢失问题及解决方法
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案
- 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案
- springboot+jersay环境下解决long类型到前台精度丢失的问题
- Spring boot处理Long类型的Json数据,在Js代码调用时精度丢失的问题
- QT 信号槽connect中解决自定义数据类型或数组作为函数参数的问题——QT qRegisterMetaType 注册MetaType——关键:注册自定义数据类型或QMap等容器类
- <问题解决>数据库date类型数据前端页面显示格式不正确问题
- 使用Navicat Premium将Oracle数据库中的表和数据迁移到MySQL数据库中,遇到的Date类型出现精度问题及解决方法
- JS浮点类型运算精度丢失问题解决办法
- 自定义Hibernate Dialect解决createSQLQuery时的decimal,long类型问题
- 数字类型、字符串类型常用转换,数据精度问题解决
- Spring MVC处理JSON数据(3)-自定义消息转换器
- double类型数据做加和操作时会丢失精度问题处理
- 类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题