使用JsonSerializer实现Long集合转string集合 避免前端接收Long类型丢失最后一位

//实现Lits<Long> 转Lits<String>

/**
 * @author zhaoliwei
 **/
public class LongListFormatSerializer extends JsonSerializer<List<Long>> {
    

    @Override
 public void serialize(List<Long> value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        String text = "";
 //是否为空
 if (!CollectionUtils.isEmpty(value)) {
            try {
                List<String> strList = new ArrayList<>(value.size());
                 for (Long aLong : value) {
                    strList.add(String.valueOf(aLong));
                     }
                        //格式化是否为空
                     if (!CollectionUtils.isEmpty(strList)) {
                        jsonGenerator.writeObject(strList);
                     return;
                     }
            } catch (Exception ignored) {

            }
            }
        jsonGenerator.writeString(text);
     }
}
第二步:在字段上使用注解
/**
 * 类目list
 **/
@JsonSerialize(using = LongListFormatSerializer.class)
private List<Long> categoryIds;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好,这是一个 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 中即可全局生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值