FastJson 输出值 首字母大小写问题

解决方案:

1. 如果你的项目由多个模块且为分布式部署, 则可考虑使用设置System.property

2. 一般只是极少数的代码出现此情况, 那么建议直接在你的单例Service初始化时, 在静态块中直接改变TypeUtils的变量值, 如果用Spring的话可以使用InitializingBean进行处理

TypeUtils.compatibleWithJavaBean = true;

3. 此变量是public的注意要在一个地方进行改动, 避免线程安全问题

 

 

项目组使用FastJson, 在输出下面一段Json的时候出现此问题, 期望是大写但是fastJson将值自动首字母变成小写了

{"code":0,"message":"","result":{"facts":{"ip":{"aCUN_ONE_MIN":0,"aCUN_TEN_MIN":0}},"level":0}}

查询后发现fastjson内部做Bean转换时会使用到 com.alibaba.fastjson.util.TypeUtils, 核心代码如下, 在类加载的时候会去读取环境变量 fastjson.compatibleWithJavaBean, 找不到则使用默认值false,将会导致首字母小写

public static boolean compatibleWithJavaBean = false;

    static {
        try {
            String prop = System.getProperty("fastjson.compatibleWithJavaBean");
            if ("true".equals(prop)) {
                compatibleWithJavaBean = true;
            } else if ("false".equals(prop)) {
                compatibleWithJavaBean = false;
            }
        } catch (Throwable ex) {
            // skip
        }
    }

public static List<FieldInfo> computeGetters(Class<?> clazz, Map<String, String> aliasMap, boolean sorted) {

String propertyName;
if (Character.isUpperCase(c3)) {
if (compatibleWithJavaBean) {
propertyName = Introspector.decapitalize(methodName.substring(3));
} else {
propertyName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4);
}
} else if (c3 == '_') {
propertyName = methodName.substring(4);
} else if (c3 == 'f') {
propertyName = methodName.substring(3);
} else {
continue;
}}

 

转载于:https://www.cnblogs.com/zhwbqd/p/3976697.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fastjson2 是一个Java语言编的JSON解析库,可以实现JSON字符串与Java对象之间的相互转换。在fastjson2中,反序列化大小写是指在将JSON字符串转换为Java对象时,对于属性名的大小写敏感性。 在默认情况下,fastjson2是大小写敏感的,即JSON字符串中的属性名必须与Java对象中的属性名完全匹配,包括大小写。如果属性名大小写不匹配,fastjson2会无法正确地将JSON字符串转换为Java对象。 而,fastjson2也提供了一些配置选项来实现反序列化大小写不敏感的功能。可以通过以下两种方式来实现: 1. 使用@JSONField注解:可以在Java对象的属性上使用@JSONField注解,并设置name属性来指定对应的JSON属性名。通过设置name属性为大小写不敏感的,可以实现反序列化大小写不敏感的效果。 示例代码如下: ```java public class User { @JSONField(name = "username") private String userName; // getter and setter } ``` 2. 使用ParserConfig配置:可以通过ParserConfig类来配置fastjson2的解析器,设置属性名的大小写敏感性。可以使用ParserConfig.getGlobalInstance()方法获取全局的ParserConfig实例,并调用setFieldBased()方法设置属性名大小写不敏感。 示例代码如下: ```java ParserConfig config = ParserConfig.getGlobalInstance(); config.setFieldBased(true); ``` 通过以上两种方式,可以实现fastjson2反序列化大小写不敏感的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值