一个java对象通过jackson转List会有告警
时间: 2024-01-21 13:02:22 浏览: 141
如果你将一个 Java 对象转换为 List 时,可能会遇到 Jackson 的告警:
```
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.fasterxml.jackson.databind.util.ClassUtil (file:/path/to/jackson-databind-2.11.2.jar) to method java.util.ArrayList$Itr.remove()
WARNING: Please consider reporting this to the maintainers of com.fasterxml.jackson.databind.util.ClassUtil
```
这个告警是因为在序列化时,Jackson 使用了 Java 反射来访问 List 的 `remove` 方法。而从 Java 9 开始,访问私有方法或字段的反射操作被禁止,因此会触发这个告警。
如果你使用的是 Jackson 2.12 或更高版本,可以通过在启动时添加 JVM 参数来禁用这个告警:
```
--add-opens java.base/java.util=ALL-UNNAMED
```
这个参数会打开 `java.util` 包的反射访问权限,让 Jackson 可以访问 `ArrayList` 的 `remove` 方法,从而避免告警。
如果你使用的是较旧的版本的 Jackson,可能需要升级到最新版本,或者手动禁用告警。可以参考下面这篇文章中的方法来禁用告警:
https://www.baeldung.com/java-9-illegal-access-exposed
阅读全文