实体类转json首字母小写问题

业务场景

由于业务需要,在特定场景下,个别对象的属性需要全大写返回给前端。

以下实体返回给前端时,会出现前端获取的key为首字母小写

public class BaseInfoVO {

    private String JSESSIONID;
}

原因分析

在spring boot 项目中,返回给前端转化为json格式常见的有两种,FastJson和Jackson两种。

        FastJson在将Java对象序列化为JSON时,默认情况下会考虑Java对象的getter方法。如果Java对象中有getter方法(如getName()),FastJson会将其视为一个属性,并且属性的名称是通过去掉getter方法名中的get前缀,并将剩余部分的首字母转换为小写来确定的。

        显然这应该是出现首字母小写的原因,解决办法也很简单。使用了@JSONField注解来明确指定属性名。注意使用@JsonProperty不一定会生效,因为他是针对Jackson方式的。

        Jackson在序列化Java对象为JSON时,默认情况下会考虑Java对象的字段名(包括私有字段,通过getter/setter方法访问)。如果字段名是全大写的,并且没有使用任何注解来改变行为,Jackson会保持这个字段名的原样在JSON中。

Jackson并不总是通过getter方法来获取属性名。它首先会查看Java对象的字段,然后考虑getter/setter方法(特别是当字段是私有的时)。但是,Jackson提供了丰富的注解(如@JsonProperty)来明确指定JSON属性名,无论字段名或getter/setter方法名是什么。所以通常这种方式不会出现这个问题,若出现了,则可以用对应的注解@JsonProperty明确属性名,也可以解决问题 

其他

至于实际是哪种方式导致的问题,可以简单的写一个主函数,测试一下
 

public static void main(String[] args) throws JsonProcessingException {
        BaseInfoVO baseInfoVO = new BaseInfoVO();
        baseInfoVO.setJSESSIONID("asaqwuhqfqwufhqf");

        // 创建ObjectMapper实例
        ObjectMapper objectMapper = new ObjectMapper();
        // 将User对象序列化为JSON字符串
        String jacksonString = objectMapper.writeValueAsString(baseInfoVO);
        System.out.println("使用Jackson序列化后的JSON字符串: " + jacksonString);
        // 使用 FastJson 将对象转化为 JSON 字符串  
        String fastJsonString = JSON.toJSONString(baseInfoVO);
        System.out.println("使用FastJson序列化后的JSON字符串: " + fastJsonString);
    }

根据结果就知道是哪种json化导致,用对应的注解明确属性名就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值