如果我删除了个人资料pojo上的@Cache
注释,它适用于开发环境。
我的问题是,当我尝试使用objectify从de userId创建密钥时,在使用intellij的GAE开发服务器中出现此错误
关于api资源管理器
503 Service Unavailable
{
"error": {
"message": "java.lang.NoSuchFieldError: WHITESPACE",
"code": 503,
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "java.lang.NoSuchFieldError: WHITESPACE"
}
]
}
}
Java例外
java.lang.NoSuchFieldError: WHITESPACE
at com.google.appengine.api.datastore.KeyFactory.stringToKey(KeyFactory.java:194)
at com.googlecode.objectify.cache.KeyMemcacheService.keyify(KeyMemcacheService.java:46)
at com.googlecode.objectify.cache.KeyMemcacheService.getIdentifiables(KeyMemcacheService.java:76)
at com.googlecode.objectify.cache.EntityMemcache.getAll(EntityMemcache.java:245)
at com.googlecode.objectify.cache.CachingAsyncDatastoreService.get(CachingAsyncDatastoreService.java:252)
at com.googlecode.objectify.impl.LoadEngine.fetch(LoadEngine.java:168)
at com.googlecode.objectify.impl.Round.fetchPending(Round.java:168)
at com.googlecode.objectify.impl.Round.execute(Round.java:137)
at com.googlecode.objectify.impl.LoadEngine.execute(LoadEngine.java:89)
at com.googlecode.objectify.impl.Round$1.nowUncached(Round.java:70)
at com.googlecode.objectify.util.ResultCache.now(ResultCache.java:30)
at com.googlecode.objectify.LoadResult.now(LoadResult.java:25)
此外,在app引擎上部署我没有任何问题,它只是工作正常。我试过chrome和firefox。
我的代码就像这样
OfyService.java
static {
try {
factory().register(Profile.class);
} catch (Exception e){
e.printStackTrace();
}
}
public static Objectify ofy() {
return ObjectifyService.ofy();
}
public static ObjectifyFactory factory() {
return ObjectifyService.factory();
}
}
Profile.java
@Entity
@Cache
public class Profile {
String userName;
String displayName;
String mainEmail;
@Id String userId;
public Profile(String userId, String userName, String displayName, String mainEmail) {
this.userId = userId;
this.userName = userName;
this.displayName = displayName;
this.mainEmail = mainEmail;
}
public String getUserName() {
return userName;
}
public String getDisplayName() {
return displayName;
}
public String getMainEmail() {
return mainEmail;
}
public String getUserId() {
return userId;
}
private Profile() {
}
public void update(String userName, String displayName, String mainEmail) {
if (userName != null) {
this.userName = userName;
}
if (displayName != null) {
this.displayName = displayName;
}
if (mainEmail != null) {
this.mainEmail = mainEmail;
}
}
public void updateName(String displayName) {
if (displayName != null) {
this.displayName = displayName;
}
}
}
MyApi.java
//region Profile
@ApiMethod(name = "saveProfile", path = "profile", httpMethod = ApiMethod.HttpMethod.POST)
public Profile saveProfile(final User user, ProfileForm profileForm)
throws UnauthorizedException {
if (user == null) {
throw new UnauthorizedException("Authorization required");
}
String mainEmail = user.getEmail();
String userId = user.getUserId();
String displayName = profileForm.getDisplayName();
Key<Profile> profileKey = Key.create(Profile.class, userId);
Profile profile = ofy().load().key(profileKey).now();
String userName = extractDefaultDisplayNameFromEmail(mainEmail);
if (profile == null) {
...
此行
Profile profile = ofy().load().key(profileKey).now();
我正在使用此版本(并尝试使用其他版本):
以及其他版本:
答案 0 :(得分:0)
如果应用程序试图访问或修改对象的指定字段,并且该对象不再具有该字段或者也已更改(通常部分编译或其他依赖项目中的相同类),则抛出此error 。 尝试在更改之前识别出该字段来自所有类的所有类并更新所有项目,并且即使通常现代IDE将为您执行此操作,简单的清理和构建也将起到作用。