簡體   English   中英

Gson錯誤:不允許在私有java.lang.String java.util.regex.Pattern.pattern上進行反射

[英]Gson error: Reflection is not allowed on private java.lang.String java.util.regex.Pattern.pattern

我正在使用Gson的.fronJson,

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

但我收到以下錯誤消息

java.lang.SecurityException:java.lang.IllegalAccessException:不允許在com.google.appengine.runtime.Request.process-ea4f755134111bd0(Request.java ),位於com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:157)上的java.lang.reflect.Field.setAccessible(Field.java:197)

這是我的班級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 Pattern regex; public String regex;

public void setRegex(String regex) { this.regex = 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上進行過測試,但您很可能必須按照這些原則進行操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM