如何在发布请求-Google Cloud Endpoints中修复NullPointerException?

时间:2019-01-06 11:18:24

标签: java google-cloud-datastore google-cloud-endpoints objectify

我正在尝试在Google端点上创建一个api方法,在该方法中我要在请求主体中接收要保存在数据存储区中的数据。

但是,当我发出请求时,会收到以下响应:

this.validForWalletPresenter.change.pipe(
  filter(()=> confirm('are you sure you want to edit?')),
  switchMap(x => {
    return <--- calling the server here --->
  })
).subscribe(x => {
  <--- handle server response here --->
});

请参考下面的api方法:

{
    "error": {
        "errors": [
            {
                "domain": "global",
                "reason": "backendError",
                "message": "java.lang.NullPointerException"
            }
        ],
        "code": 503,
        "message": "java.lang.NullPointerException"
    }
}

以下是我的dao类实现:

@ApiMethod(name="profile",
               path="profile",
               httpMethod=HttpMethod.POST)
    public UserProfile addUser(UserProfile userProfile) {

        userProfileService.addUser(userProfile);
        return userProfile;
    }

请在下面参考实体类:

package com.travelplannr.endpoint.dao;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyFactory;
import com.googlecode.objectify.ObjectifyService;
import com.travelplannr.endpoint.entities.UserProfile;

public class UserProfileDaoImpl implements UserProfileDao {

    static {
        factory().register(UserProfile.class);
    }

    public static Objectify ofy() {
        return ObjectifyService.ofy();
    }

    public static ObjectifyFactory factory() {
        return ObjectifyService.factory();
    }

    @Override
    public void addUser(UserProfile userProfile) {

        UserProfileDaoImpl.ofy().save().entity(userProfile).now();
    }

}

下面是堆栈跟踪:

package com.travelplannr.endpoint.entities;

import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;

@Entity
public class UserProfile {

    @Id
    private String email;
    private String name;
    private String password;

    public UserProfile() {}

    public UserProfile(String name, String email, String password) {
        this.name = name;
        this.email = email;
        this.password = password;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserProfile [name=" + name + ", email=" + email + ", password=" + password + "]";
    }
}

我还检查了在api方法中删除对UserProfileService.add的调用,只是返回了我在请求正文中收到的对象,并且该对象不为空。

请帮助! 预先感谢。

1 个答案:

答案 0 :(得分:0)

您的帖子缺少的上下文是userProfileService的初始化或如何首先设置(这不在此ApiMethod的范围内)。如果我正确理解的话,这似乎根本就不是端点的问题;那只是一条红鲱鱼。

通过临时删除Endpoints集成并确保通过用于连接事物的任何注入框架/方法正确创建所有对象引用,可以帮助加快调试速度。也许创建一个小的main()方法来触发对象引导并检查以确保此userProfileService不为空?这样一来,您便可以在命令行环境中更快地进行迭代,直到在尝试使Endpoints集成正常工作之前找出初始化失败的根本原因。