2024
2024-01-07
不知道ApiCloud中的com.uzmap.pkg.uzapp.UZApplication对webView做了什么,使用原生webView打开网页总是显示空白一片。
2024-01-08
controller统一异常处理类:org.springframework.web.servlet.HandlerExceptionResolver
2024-01-16
选项目,要选有正向激励的。(正向激励的意思是,做一点,会收获一点回报,再回一点,收获更多,螺旋上升,渐进激励)
2024-03-06
SpringBoot项目中,tomcat启动的,明明架包中有log4j-slf4j-impl-2.17.2.jar这个类和log4j的包,就是没有日志打印。
启动过程中显示:No SLF4J providers were found.
后来通过对比,没日志的是log4j-slf4j-impl-2.17.2.jar版本的,其它项目中,有日志的是log4j-slf4j2-impl-2.20.0.jar版本的,就是
比较新的那个包,替换比较旧的包,后来重启服务器,居然成功了,有日志了。
后来回过头来看日志,才发现自己吃了目光短㳀的亏,原来重点在之后的几句话。。。。
SLF4J(W): No SLF4J providers were found. SLF4J(W): Defaulting to no-operation (NOP) logger implementation SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. SLF4J(W): Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. SLF4J(W): Ignoring binding found at [jar:file:/project/api/user/WEB-INF/lib/log4j-slf4j-impl-2.17.2.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J(W): See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
我了个去。
2024-03-08
Springboot controller中返回的json, 修改date默认返回是时间戳
在application.properties中加上
spring.jackson.serialization..write-dates-as-timestamps=true
2024-04-17
一个类找不到方法,明明用的是最新的jar包,还是报这个错误,后来在idea查到,这个类分别在不同的两个包里面,一个包里的那个类确实没有这个方法
tomcat应该是加载了没有那个方法的类,解决办法,把那个没方法的类,从jar包里面删除。
2024-05-22
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 【tomcat 9】
这个报错,基本可以判断是包不兼容。
tomcat9 还挺强大的,直接告诉你原因
按提示把persistence-api-1.0.2.jar删除就好。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
java.lang.IllegalArgumentException: The character [_] is never valid in a domain name.
咋一看,还以为是tomcat报的错,其实解决办法是在nginx, nginx配置中upstream 后面的名字不能用下划线,对掉下划线就好了。
参考博客: https://www.cnblogs.com/xiangxinhouse/p/12050966.html
2024-07-04
记一次编译的奇葩经历。
我的完整错误打包过程是这样的(后来总结的),最开始是用的4.6.10版本,后来只在主pom.xml里把改成了5.8.28版本,本地正常打包。放到服务器上报错。
主要原因是,本地打包的时候,是两个版本都有4.6.10和5.8.28。 然后到服务器上,只有5.8.28. 然后就报错了。
原因:所以clsss中的CharSequence和String是有区别的。如果你class中编译的方法是调用CharSequene的参数,试图是调用方法中是String的方法,必报错。
如果class中用的是String方法,然后想调用定义中是CharSequence的方法,必报错。
所以,再一次敲响了警钟,1、不要多个版本并存。2、重新打包的重要性。
因为我本地打包,是两个版本并存的,本打打包用的是String的方法名参数,(就是读的hutools-all4.6.10)。然后放到服务器上,服务器上只有hutools5.8.28的包,这个包里面,对应方法的参数是CharSequence
然后就爆发了冲突,说方法不存在。
java.lang.NoSuchMethodError: cn.hutool.core.date.DateUtil.parse(Ljava/lang/String;)Lcn/hutool/core/date/DateTime;
个人觉得吧,负责维护hutools-all的也有一定责任,为什么 要把String参数的方法取消呢,两个并且不好吗?String和CharSequene都作为方法名参数,两个都存在,这样兼容性不是更强了。
2024-08-02
validation-api-1.0.0.GA.jar和jakarta.validation-api-2.0.2.jar不能同时存在
报错日志:
The called method's class, javax.validation.spi.ConfigurationState, is available from the following locations:
jar:file:/apps/project/api/API_UBP_BOOT/WEB-INF/lib/validation-api-1.0.0.GA.jar!/javax/validation/spi/ConfigurationState.class
jar:file:/apps/project/api/API_UBP_BOOT/WEB-INF/lib/jakarta.validation-api-2.0.2.jar!/javax/validation/spi/ConfigurationState.class
原因是两个类里面都有javax/validation/spi/ConfigurationState的 spi 定义,冲突
这两个类在Apache Tomcat/8.5.70中启动是正常在,但是在Apache Tomcat/8.5.92启动中报错。真的是奇怪。
解决办法:删除validation-api-1.0.0.GA.jar (我第一次删除jakarta.validation-api-2.0.2.jar,启动报缺少类。后来选择删除validation-api-1.0.0.GA.jar ,保留jakarta.validation-api-2.0.2.jar就ok了)
记录一下:
Fiddler : The System proxy was changed.click to reenable Fidder capture
解决方法:最后面的最有效: https://blog.csdn.net/weixin_46114859/article/details/135158052
- - - - -
在AES中加密中,iv不同,可以让加密同一个原文生成的 密文不同 ,但是解的时候,只有同时密码和iv都对应都上,才能解出原文。
2024-08-07
微信H5的限制还挺多的。
1、h5的订购地址必面在安全域名的网页下触发,也就是header中Referer要是安全域名的网页,否则报错:
商家参数格式有误,请联系商家解决
2、h5下单接口/v3/pay/transactions/h5中的payer_client_ip中的ip要和客户端用户的真实ip一致,要不然报错
由于商家传入的H5交易参数有误,该笔交易暂时无法完成,请联系商家解决。
3、加解密密钥太长。
java.lang.IllegalArgumentException: java.security.InvalidKeyException: Illegal key size at com.wechat.pay.java.core.cipher.AbstractAeadCipher.decrypt(AbstractAeadCipher.java:83) ~[wechatpay-java-core-0.2.12.jar:0.2.12] at com.wechat.pay.java.core.certificate.CertificateDownloader.decryptCertificate(CertificateDownloader.java:106) ~[wechatpay-java-core-0.2.12.jar:0.2.12] at com.wechat.pay.java.core.certificate.CertificateDownloader.download(CertificateDownloader.java:83) ~[wechatpay-java-core-0.2.12.jar:0.2.12]
有三种解决办法:1替换法:去官网下载没有限制(unlimited)的jar包 local_policy.jar 和 US_export_policy.jar 【lib/security】
2修改法:我的是windows下的jre1.8.0_151版本,系统里自带limited和unlimited的两个版本,所以只需要修改配置,找到
Java\jre1.8.0_151\lib\security\java.security
找到#crypto.policy=unlimited去掉前面的#号就可以了。
3升级法:用最新的java版本就什么都不用改了。linux 1.8.0_275的版本是默认支持的。【1.8.0_91也支持】
2024-08-13
记录一次测试环境没有100%模拟线上环境造成的bug
背景: 旧系统某一类redis键值是java序列化的二进制数据,新系统准备用json字符串代替。
然后想到的解决方案是,先用字符串去取,如果开头是 { 符号,就用json去解析,否则就用java序列化解析。
这样,我们就需要一个RedisTemplate的bean对象
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, byte[]> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, byte[]> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory);
// 设置key的序列化器为StringRedisSerializer template.setKeySerializer(new StringRedisSerializer());
// 对于byte[]类型的value,不需要设置额外的序列化器 template.afterPropertiesSet(); return template; } }
没毛病,然后创两个设置set和获取get的方法
@Autowired private RedisTemplate<String, byte[]> redisTemplate; public byte[] getValueAsBytes(String key) { return redisTemplate.opsForValue().get(key); } public void setValueAsBytes(String key, byte[] value) { redisTemplate.opsForValue().set(key, value); }
完美,然后,测试环境因为没有存量的缓存数据,为了保险,我就用setValueAsBytes方法,把一个对象的序列化后的数据设备进去。测试ok, 准备升级。
线上升级报错
java.lang.ClassCastException: com.dr.iptv.vo.UserInitInfo cannot be cast to [B
刚开始报这个错,完全看不懂,我也没要它类型转换呀,我只是要纯byte[]
后来一点点查资料,好像大概意思是,
RedisTemplate默认的ValueSerializer是JdkSerializationRedisSerializer, 然后因为我没有设置,它默认就是JdkSerializationRedisSerializer转换器,
系统无法将UserInitInfo这个类的字节流转成byte[].
然后因为测试环境,我是用setValueAsBytes设置进去的,然后是用getValueAsBytes取出来的,他们是成双成对的,(意思是测试环境应该存的是btye[]对象的序列化字节流)所以没暴露出问题。而正式环境里,redis
里存的是SerializationUtils.serialize(obj)的字节流。 格式不匹配,就报错了。
解决办法:
public class ByteArraySerializer implements RedisSerializer<byte[]> { @Nullable public byte[] serialize(@Nullable byte[] value) throws SerializationException { return value; } @Nullable public byte[] deserialize(@Nullable byte[] bytes) throws SerializationException { return bytes; } }
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, byte[]> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, byte[]> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); // 设置key的序列化器为StringRedisSerializer template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new ByteArraySerializer()); template.setHashKeySerializer(new ByteArraySerializer()); template.setHashValueSerializer(new ByteArraySerializer()); // 对于byte[]类型的value,不需要设置额外的序列化器 template.afterPropertiesSet(); return template; } }
2024-08-19
virtual box 手动扩容: VBoxManage modifyhd [虚拟机vdi文件路径] --resize [新大小(MB)]
VBoxManage modifyhd "C:\Path\To\Your\VirtualBox\VMs\MyVirtualMachine\MyVirtualMachine.vdi" --resize 102400
2024-09-03
com.aliyuncs.exceptions.ClientException: SDK.InvalidRegionId : Can not find endpoint to access.
升级boot的时候jar版本搞错了。之前ok的是aliyun-java-sdk-core-4.5.2.jar版本。
后来升级了一个aliyun-java-sdk-core-4.0.6.jar就报这个错误了。恢复之前的版本就行了。
2024-10-27
如果pom.xml中填的依赖项没指定版本,它就默认下最新版本的。囧。
2024-10-28
以前的系统(spring+hibernate),查数据List<Map<String, Object>>中日期返回的是Timestamp类型。
现在的系统(springboot+mybatis), 查数据List<Map<String, Object>>中日期返回的是LocalDateTime类型。
Timestamp用JSONObject序列化是时间戳,LocalDateTime用JSONObject串列化是字符串 “2021-05-14 00:00:00” 格式不同。。。。
2024-10-29
明明代码是一样的,公司能运行,家里不能运行。
后来发现家里的pom.xml有红线报错。解决办法:
<parent></parent>中加<relativePath/>。取自博客:https://blog.csdn.net/2202_75618418/article/details/128172073 解决办法1.
2024-11-25
nginx中配置了 proxy_set_header Host xx:xx;
然后服务器本身配有302跳转,一跳转之后,原来是域名访问的,变成了xx:xx地址。。。。
2024-12-09
GET请求的一个不安全性是,浏览器会通过Referer携带上一个页面地址,如果你的请求是GET的,那地址和参数都暴露了,如果是POST,至少参数没有暴露。
2024-12-30
Account xxx already exists
以及
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See http://xxx/help/topics/git/troubleshooting_git#error-on-git-fetch-http-basic-access-denied Authentication failed for 'http://xxx/xx.git/'
是因为idea里面有一个旧的用户名的密码,删除就行了。
File -> Settings... -> 弹出窗口左边搜索GitLab ,删除右边的帐号信息就可以了。
posted on 2024-01-02 15:35 angelshelter 阅读(29) 评论(0) 编辑 收藏 举报