GSON错误:在private java.lang.string java.util.regex.pattern.pat



我正在使用.fronjson,

 List<MyPattern> MyPattern = gson.fromJson(jsonReader,
         new TypeToken<List<MyPattern>>() {}.getType() );

但我在下面收到了错误消息

java.lang.securityException:java.lang.illegalaccessexception:不允许在私有java.lang.lang.string java.util.regex.pattern.pattern.pattern.pattern上进行反射 在com.google.appengine.runtime.request.request.process-ea4f755134111bd0(request.java) 在java.lang.reflect.field.setaccessible(field.java:197) 在com.google.gson.internal.bind.reflectivetypeadapterfactory.getboundfields(ReflectiveTypeDypeDapterFactory.java:157)

这是我的班级mypattern。

public class MyPattern {
    public String category;
    public Pattern regex;
    public void setCategory(String category) {
        this.category = category;
    }
    public String getCategory() {
        return category;
    }
    public void setRegex(String regex) {
        this.regex = Pattern.compile(regex);
    }
    public Pattern getRegex() {
        return regex;
    }
    @Override
    public String toString() {
        return "key: " + this.category + ", pattern: " + this.regex;
    }
}

只是想知道该错误是由pattern.compile()引起的吗?如果我更改public Pattern regex;,它可以工作到

public String regex;

public void setRegex(String regex) { this.regex = regex; }。但是想知道为什么模式不起作用,并且它可以解决它并继续使用模式。

,由于Google App Engine强制执行了一些沙盒限制,因此看起来SecurityException是抛出的(请参阅此帖子)

要解决这个问题,我建议您进行以下设置:

public class MyPattern {
    public String category;
    public String regex;
    public Pattern pattern;
    public Pattern getPattern() {
        if(pattern == null) {
            pattern = Pattern.compile(regex);
        }
        return pattern;
    }
}

我尚未在Google App Engine上进行测试,但是您很可能必须按照这些行进行操作

相关内容

最新更新