摘要: Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
Spring MVC自定义消息转换器(可解决Long类型数据传入前端精度丢失的问题)
方法一 jackson注解
1 2 3 4 5 6 7 8 9 10
| <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>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| 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); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 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; } } }
|
1 2 3 4 5 6 7 8
| @Data public class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @JsonSerialize(using = LongJsonSerializer.class) @JsonDeserialize(using = LongJsonDeserializer.class) private Long id; }
|
发现在List中还有问题
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <!-- 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>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @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); // SerializerProvider serializerProvider = objectMapper.getSerializerProvider(); // serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() { // @Override // public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { // jsonGenerator.writeString(""); // } // // }); return objectMapper; }
|
小坑一个记录一下, 解决现有问题