extends SimpleModule 全局Long类型转String 排除IPage类属性不转换
时间: 2023-12-14 17:37:38 浏览: 203
您好,这是一个 Java 代码片段,可以通过扩展 Jackson 库中的 SimpleModule 类来实现全局 Long 类型转换为 String 类型,同时排除 IPage 类属性不转换。具体实现如下:
```java
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
public class LongToStringModule extends SimpleModule {
public LongToStringModule() {
addSerializer(Long.class, new LongToStringSerializer());
addSerializer(Long.TYPE, new LongToStringSerializer());
}
private static class LongToStringSerializer extends JsonSerializer<Long> {
@Override
public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(String.valueOf(value));
}
}
@Override
public void setupModule(SetupContext context) {
super.setupModule(context);
context.addSerializers(new LongToStringSerializer());
context.addBeanSerializerModifier(new LongToStringBeanSerializerModifier());
}
private static class LongToStringBeanSerializerModifier extends SimpleBeanPropertyFilter {
@Override
public void serializeAsField(Object pojo, JsonGenerator gen, SerializerProvider provider, PropertyWriter writer) throws Exception {
if (pojo instanceof IPage && writer.getName().equals("records")) {
// 排除 IPage 类的 records 属性
return;
}
Object value = writer.get(pojo);
if (value instanceof Long) {
gen.writeStringField(writer.getName(), String.valueOf(value));
} else {
super.serializeAsField(pojo, gen, provider, writer);
}
}
}
}
```
上述代码中,我们定义了一个 LongToStringModule 类,并继承了 Jackson 库的 SimpleModule 类。在构造方法中,我们添加了一个 LongToStringSerializer 类型的序列化器,用于将 Long 类型的数据转换为 String 类型。在 setupModule 方法中,我们添加了 LongToStringSerializer 序列化器和 LongToStringBeanSerializerModifier 类型的序列化器修改器。其中,LongToStringBeanSerializerModifier 类型的序列化器修改器用于对 IPage 类的 records 属性进行排除。最后,您可以在项目启动时将 LongToStringModule 注册到 ObjectMapper 中即可全局生效。
阅读全文