1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java线程输出字母大小写_FastJson 输出值 首字母大小写问题

Java线程输出字母大小写_FastJson 输出值 首字母大小写问题

时间:2022-04-27 16:13:07

相关推荐

Java线程输出字母大小写_FastJson 输出值 首字母大小写问题

解决方案:

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

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

patibleWithJavaBean = 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, 核心代码如下, 在类加载的时候会去读取环境变量patibleWithJavaBean, 找不到则使用默认值false,将会导致首字母小写

public static boolean compatibleWithJavaBean = false;static{try{

String prop= System.getProperty("patibleWithJavaBean");if ("true".equals(prop)) {

compatibleWithJavaBean= true;

}else if ("false".equals(prop)) {

compatibleWithJavaBean= false;

}

}catch(Throwable ex) {//skip

}

}

public static List computeGetters(Class> clazz, Map 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;

}}

原文:/zhwbqd/p/3976697.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。