首页 > 其他分享 >spring boot fastjson Long 转字符串

spring boot fastjson Long 转字符串

时间:2024-10-17 11:21:24浏览次数:14  
标签:fastjson String spring boot value Long LongJsonDeserializer null class

 由于Long类型返回给前端时,如果数值过大,会导致精度丢失,这时候就需要把Long转成String。

这时候如果专门为其写一个属性来存储,比较麻烦。这时候可以使用fastJson里的标签

@JSONField(serializeUsing = ToStringSerializer.class)

只要在model类上的Long字段加上这个标签,则会返回前端时,把Long转成String

要注意的一点是。serializeUsing 这个属性是在fastjson 1.2.16后才有的。要检查下fastJson的版本

fastjson 反序列化有漏洞,需要自定义反序列化实现类

@SuppressWarnings("unused")
public class LongJsonDeserializer extends JsonDeserializer<Long> {

    private static final Logger logger = LoggerFactory.getLogger(LongJsonDeserializer.class);

    @Override
    public Long deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        String value = jsonParser.getText();
        try {
            return value == null || value.length() == 0 ? null : Long.valueOf(value);
        } catch (NumberFormatException e) {
            logger.error("LongJsonDeserializer.deserialize failed:{},cause:{}", e.getMessage(), e.getCause());
            throw new RuntimeException("LongJsonDeserializer.deserialize failed");
        }
    }
}
@SuppressWarnings("unused")
public class LongJsonSerializer extends JsonSerializer<Long> {

    @Override
    public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String text = (value == null ? null : String.valueOf(value));
        if (text != null) {
            jsonGenerator.writeString(text);
        }
    }
}

dto  vo 使用 

    @JsonSerialize(using = LongJsonSerializer.class)
    @JsonDeserialize(using = LongJsonDeserializer.class)
    private Long id;

标签:fastjson,String,spring,boot,value,Long,LongJsonDeserializer,null,class
From: https://blog.csdn.net/hjy930226173/article/details/143002314

相关文章

  • springboot的项目如何既要用jar包启动,同时还可以为不同的机房设置不同的配置文件
    作者:京东科技李意文 1、首先先把配置文件从jar中抽离示例代码:<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><exclu......
  • 【Springboot】注解EqualsAndHashCode
    先看问题,如图所示注解解释@EqualsAndHashCode作用与子类上callSuper=true,根据子类自身的字段值和从父类继承的字段值来生成hashcode,当两个子类对象比较时,只有子类对象的本身的字段值和继承父类的字段值都相同,equals方法的返回值是true。callSuper=false,根据子类......
  • 基于SpringBoot+Vue+uniapp的互助学习小程序的详细设计和实现(源码+lw+部署文档+讲解
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于springboot高校软件工程专业人才培养达成评价系统(源码+文档+部署讲解等)
    目的:本课题旨在设计并实现一个基于SpringBoot的攀枝花学院软件工程专业人才培养达成评价系统,提高人才培养质量和效率,为学校的教学管理和决策提供科学依据。意义:一、提高人才培养质量科学评价体系:通过建立科学合理的人才培养达成评价体系,能够全面、客观地评价学生的专......
  • 基于微信小程序+springboot的加油站会员管理系统设计与实现(源码+文档+部署讲解等)
    目的:本课题旨在设计并实现一个基于SpringBoot的攀枝花市金河加油站会员管理系统,提高加油站的会员管理效率和服务质量,为加油站的经营决策提供数据支持。意义:一、提高会员管理效率自动化管理流程:系统可以实现会员信息的自动录入、更新、查询和统计等功能,减少人工操作的......
  • SpringBoot原理
    1.配置优先级SpringBoot项目当中支持的三类配置文件:application.propertiesapplication.ymlapplication.yaml在SpringBoot项目当中,要想配置一个属性,可以通过这三种方式当中的任意一种来配置都可以,那么如果项目中同时存在这三种配置文件,且都配置了同一个属性,如:Tomcat端......
  • SpringSecurity + Spnego + Kerberos 实现AD域单点登录
    SpringSecurity+Spnego+Kerberos实现AD域单点登录文章目录SpringSecurity+Spnego+Kerberos实现AD域单点登录前言一、域是什么?二、单点登录是什么?三、如何实现四、Kerberos五、Spnego介绍六、spring-ldap连接域实现域用户管理七、单点登录案例前言本文......
  • Spring Cloud Gateway关键点全局Token过滤器,局部过滤器接口耗时,全链路跟踪TraceId日志
    一.全局Token过滤器在SpringCloudGateway中,实现全局过滤器的目的是对所有进入系统的请求或响应进行统一处理,比如添加日志、鉴权等。下面是如何创建一个全局过滤器的基本步骤:步骤1:创建过滤器类首先,你需要创建一个实现了GlobalFilter接口,创建一个全局token过滤器。@Slf......
  • 基于SpringBoot的养生平台系统的设计与实现
    基于SpringBoot的养生平台系统的设计与实现1、项目的设计初衷:​随着生活水平的提高,大家对于生活品质,身体状况的最求也在变的越来越高,长寿,养生这样的词出现在大家生活中的频率越来越高。本系统设计是为了让大家能够咨询养生知识,分享养生知识。​项目基于SpringBoot+Vu......
  • SpringBoot Aop面向切面编程-快速入门-实战案例
    AOP部分笔记来自黑马程序员。一、AOP概述什么是AOP?AOP英文全称:AspectOrientedProgramming(面向切面编程、面向方面编程),其实说白了,面向切面编程就是面向特定方法编程。那什么又是面向方法编程呢,为什么又需要面向方法编程呢?来我们举个例子做一个说明:比如,我们这里有一个......