我正在使用.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上进行测试,但是您很可能必须按照这些行进行操作