最近在做项目过程中,发现通过预发环境的配置文件去调用第三方服务的时候总是提示签名appId不正确,仔细检查了yml配置文件发现并无异常,代码逻辑也是正确的,最诡异的是只有预发环境出现问题。
具体问题描述如下:
yml文件中配置如下:
paas:
appId: 6E212341234
secretKey: EADvFUILWDn9FrWIiRK6w7R+EZPLH2h0d7hNivHBetLGRdH05dfslYf
wGKDfQpEeT/2C0sqK0SpldlbbnhekAx/n0D4wDDHdgFMXb53ldZovKbNEJoQr6f4
scCmNX+OX71YMsDnGmRKK5yadJPqJ7XOu1lmZk+T/mocbr8DH+P9Z78cFFq7qJvu
3cMv5J5acb3GE8Y2bG0rebrX3fh7BkWEkqi4640YcnVqLno0yDscjleV01Bk7X4N
0cmwAS84LrfYglqIqzCPAoKrvwKBgQDVN0L196UwEyG3IapDydHoCK0Juqd8iDCO
zfCpBbLTK08+JcslcPxu5Gdy1PE0QvBbu1/Lyp3eQELwL4tq3m1mVoSfcfhjOLLD
7JaUs1oawloAKKcfBQ+/woaAM0DZHzvKloFt....
项目中代码如下:
public class xxxx {
//问题在于这里获取到的值为Infinity
@Value("${paas.appId}"}
private String appId;
@Getter
.....
@Setter
.....
}
后发现appId的string值恰好与科学计数法相似,遂将YML里面appId 加上单引号‘ ’,问题解决。
paas:
appId: '6E212341234'
secretKey: EADvFUILWDn9FrWIiRK6w7R+EZPLH2h0d7hNivHBetLGRdH05dfslYf
wGKDfQpEeT/2C0sqK0SpldlbbnhekAx/n0D4wDDHdgFMXb53ldZovKbNEJoQr6f4
scCmNX+OX71YMsDnGmRKK5yadJPqJ7XOu1lmZk+T/mocbr8DH+P9Z78cFFq7qJvu
3cMv5J5acb3GE8Y2bG0rebrX3fh7BkWEkqi4640YcnVqLno0yDscjleV01Bk7X4N
0cmwAS84LrfYglqIqzCPAoKrvwKBgQDVN0L196UwEyG3IapDydHoCK0Juqd8iDCO
zfCpBbLTK08+JcslcPxu5Gdy1PE0QvBbu1/Lyp3eQELwL4tq3m1mVoSfcfhjOLLD
7JaUs1oawloAKKcfBQ+/woaAM0DZHzvKloFt....
YML中使用‘ ’(单引号)不会转换单引号里面的特殊字符,如 \n等。
YML中使用" "(双引号)会转换双引号里面的特殊字符,如
//在yml中单引号值的示例
eg: 'a \n b \n c'
//实际为
a \n b \n c
//在yml中双引号的值示例
eg: "a \n b \n c"
//实际为
a
b
c