springboot 返回前端数据,利用jackson全局配置将long转换为string,防止精度丢失的代码
时间: 2023-06-09 11:06:20 浏览: 448
可以在SpringBoot项目中的配置类中添加以下代码,实现将Long类型转换为String类型,并避免精度丢失的问题。
```java
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Long.class, ToStringSerializer.instance);
module.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(module);
return objectMapper;
}
}
```
以上代码通过注册自定义的Jackson模块,将Long类型序列化为String类型。这样在SpringBoot项目中返回JSON数据时,Long类型的数据将会默认转换为String类型,避免了精度丢失的问题。
相关问题
java Jackson全局转化long类型为String 排除IPage类属性不转换
可以通过自定义Jackson的ObjectMapper来实现。具体实现如下:
1. 定义一个自定义的ObjectMapper,继承自Jackson的ObjectMapper:
```java
public class LongToStringObjectMapper extends ObjectMapper {
public LongToStringObjectMapper() {
SimpleModule module = new SimpleModule();
// 设置序列化规则,将Long类型转为String类型
module.addSerializer(Long.class, ToStringSerializer.instance);
module.addSerializer(Long.TYPE, ToStringSerializer.instance);
// 反序列化时不做任何操作
module.addDeserializer(Long.class, new JsonDeserializer<>() {
@Override
public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return p.getValueAsLong();
}
});
this.registerModule(module);
}
}
```
2. 在Spring Boot中配置这个自定义的ObjectMapper:
```java
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
LongToStringObjectMapper objectMapper = new LongToStringObjectMapper();
// 排除IPage类属性不转换
objectMapper.addMixInAnnotations(IPage.class, IgnoreLongTypeInPage.class);
return objectMapper;
}
@JsonFilter("ignoreLongTypeInPage")
interface IgnoreLongTypeInPage {}
}
```
在上面的代码中,我们通过@JsonFilter注解创建了一个名为ignoreLongTypeInPage的过滤器,在IPage类上使用该注解来标记需要排除的属性,即可实现全局转化long类型为String,但排除IPage类属性不转换。
SpringBoot返回前端的字段 隐藏没有值的字段
可以通过使用Jackson库来控制Spring Boot返回前端的字段,隐藏没有值的字段。具体来说,您可以使用以下注释来控制字段的序列化和反序列化:
- @JsonInclude(JsonInclude.Include.NON_NULL):标记在类或字段上,表示只有当字段不为null时,才会输出该字段。
- @JsonInclude(JsonInclude.Include.NON_EMPTY):标记在类或字段上,表示只有当字段不为null且不为空字符串时,才会输出该字段。
例如,您可以这样使用注释来隐藏没有值的字段:
```java
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User {
private Long id;
private String name;
private Integer age;
// getters and setters
}
```
这样,当您返回一个User对象时,只有id、name、age字段不为null时,才会输出该字段。
另外,如果您希望在全局范围内控制所有返回前端的字段,可以在Spring Boot的配置文件application.properties或application.yml中添加以下配置:
```properties
spring.jackson.default-property-inclusion = non_null
```
或者
```yaml
spring:
jackson:
default-property-inclusion: non_null
```
这样,所有返回前端的对象中,只有字段不为null时,才会输出该字段。
希望这能解决您的问题。如果您还有其他问题,请随时问我。
阅读全文