我将应用程序引擎与 Spring 一起使用,但出现以下异常:
java.lang.SecurityException: java.lang.IllegalAccessException: Reflection is not allowed on private java.lang.Throwable
使用 ResponseBody 序列化 Controller 的结果时会发生这种情况:
@RequestMapping("/mapping")
public @ResponseBody
Response handleRequest(Request request) {
Response 对象有一个私有(private) Throwable 及其 getter 和 setter。
为什么gae就不能反射(reflection)一下呢?
最佳答案
首先,安全异常(exception)是沙箱限制。沙盒类通常不允许使用反射来访问另一个类的私有(private)成员。 (有充分的理由)。据推测,GAE 要么本身已沙箱化,要么正在沙箱化您的类。
那么当你有私有(private)字段的 getter 和 setter 时,为什么会发生这种情况呢?
我的猜测是 getter 和/或 setter 方法的签名与私有(private)字段的名称和类型不完全匹配。或者也许它们无法访问。检查那些。如果这没有帮助,请尝试将私有(private) Throwable 字段公开(ick)作为实验。
关于java - 不允许对私有(private) Throwable 进行反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491862/