当前位置: 首页 > 知识库问答 >
问题:

无法使用基于球衣的客户端拨打REST电话

龚星洲
2023-03-14

我有一个基于泽西岛的REST客户端和一个GET调用,定义如下:

调用client.get()后代码没有出来。在client.get()调用中遇到空指针异常,这是来自调用REST客户端的类的初始化逻辑:

学生.java :

public class Student {

    private static RestClient client;

    @SuppressWarnings("static-access")
    public Student(Client client) {
        this.client = new RestClient(client, "xyz");
    }

    public static RestClient getClient() {
        return client;
    }

    public static void addStudent() throws Exception {

        try {       
            String addStudentUri = "https://www.zebapi.com/api/v1/market/ticker-new/btc/inr";     
            ClientResponse js_response = getClient().get(URI.create(addStudentUri));
            String s = js_response.getEntity(String.class);
            System.out.println(s);
        } catch (Exception e) {
            System.out.println(e);          
        }
    }

    public static void main(String[] args) {
        try {
            addStudent();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

RestClient.java

public class RestClient {

    private Client client;
    private String randomHeader = "";

    public RestClient(Client jerseyClient) {
        this.client = jerseyClient;
    }

    public RestClient(Client jerseyClient, String random) {
        this.client = jerseyClient;
        this.randomHeader = random;
    }

    public String getRandomHeader() {
        return randomHeader;
    }

    public void setRandomHeader(String randomHeader) {
        this.randomHeader = randomHeader;
    }

    public RestClient() {
    }

    public ClientResponse get(URI uri)
    {
        return client.resource(uri)
                .get(ClientResponse.class);
    }

    public ClientResponse post(URI uri)
    {
        return client.resource(uri)
                .type(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON)
                .post(ClientResponse.class);
    }

}

你能帮忙吗?

共有1个答案

刘骏祥
2023-03-14

您从未初始化过客户端,这就是您获得NPE的原因;您正在尝试使用尚未初始化的对象

您应该做的是从所有方法和客户端字段中删除所有静态修饰符;除main方法之外的所有修饰符。然后在main方法中,创建一个新的学生传入一个新的客户端。然后使用该学生实例调用add学生()方法。

public class Student {
    private RestClient client;

    public Student(Client client) {
        this.client = new RestClient(client, "xyz");
    }

    public RestClient getClient() {
        return this.client;
    }

    public void addStudent() {}

    public static void main(String...args) {
        new Student(Client.create()).addStudent();

        // or a more verbose way
        Client jerseyClient = Client.create();
        Student student = new Student(jerseyClient);
        student.addStudent();
    }
}

我将其标记为社区Wiki,因为实际上它应该被标记为什么是NullPointerExc的重复,以及我如何修复它?。is已成为Stack Overflow中的标准做法,当一个问题是关于一个易于修复的NullPointerExc的时,我们应该将该问题关闭为该链接问题的重复。

< code > NullPointerException 通常很容易修复,如果它是由我们开发人员编写的代码引起的。能够检测并修复这个问题应该是小事一桩。因此,请查看相关问题,以便您下次能够自己处理此类问题。

 类似资料:
  • 首先,问题是当我从rest servlet调用ejb时,ejb总是null。 我在jersey spring 3.0.5中开发了一个rest web服务。以及用于服务的EJB3.1。 我已经在耳朵里打包了war和jar,所以我的应用程序看起来像(我使用maven作为依赖): 我想知道如何从war文件中的类调用jar文件中的服务。据我记忆,这是通过JNDI,我需要公开ejb apis?我应该怎么做?

  • 问题内容: 有了JSR 311及其实现,我们有了一个强大的标准,可以通过REST公开Java对象。但是,在客户端,似乎缺少与SOAP的Apache Axis类似的东西-隐藏了Web服务并将数据透明地封送回Java对象的东西。 您如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?还是专业客户(例如Jersey或Apache CXR)? 问题答案: 这是一个古老的

  • 拨打电话     拨打电话给 Skype 联系人。开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 从联系人名单选择拨打对象 1. 进入 Skype 的选单画面后选择(联系人)。 2. 从联系人名单中选择电话的拨打对象。 可拨打电话给登入状态为(在线)等可通话状态的联系人。 开始呼叫后,会显示对方的名字或 Skype 账号。对方回复后即可开始通话。 提示 透过 Sky

  • 问题内容: 我正在尝试拨打的电话不是使用特定号码,而是使用在变量中被调用的号码,或者至少告诉它在您的电话中提取该号码。这个在变量中被调用的数字是我使用解析器或从网站sql检索到的数字。我做了一个按钮,试图用一个函数调用存储在变量中的电话号码,但无济于事。一切都会帮助谢谢! 问题答案: 试一试: 假设电话号码在。 的返回Optional,因此使用可以确保它是(而不是)返回的。 对于Swift 3:

  • 问题内容: 我如何查看Jersey生成并发送到服务器的实际请求?我在处理特定请求时遇到问题,运行Web服务器的同伴要求查看完整的请求(带有标头等)。 问题答案: 如果您仅使用Jersey客户端API,则LoggingFilter(客户端过滤器)应该可以帮助您: 否则,您可以使用其他LoggingFilter(容器过滤器)再次在服务器上记录请求和响应。

  • 我已经通过以下方式将aws amplify集成到和android应用程序中https://docs.amplify.aws/lib/q/platform/android 在我的mac book pro中。 现在我签出相同的项目到另一台机器mac迷你。并试图运行。 我得到这个错误,不知道如何修复它。 尝试过,放大拉,放大配置,放大初始化。但是没有人能够解决这个问题。 提前感谢