使用REST服务时出现空点异常

时间:2018-07-24 07:49:35

标签: java spring rest jackson

我在Spring Boot中使用rest模板在Spring Boot中构建REST客户端,以使用它并将其解析为java模型对象。我的代码段类似于下面的控制器,该控制器在计划的作业中每隔3000毫秒使用杰克逊解析器获取API响应并将其解析为模型对象:

@RestController
public class RestAPIConsumerController {
    @Qualifier("restTemplateConsumer")
    private RestTemplate restTemplateConsumer;

    @Bean
    public RestTemplate restTemplateConsumer() {


        RestTemplateBuilder builderConsumer = new RestTemplateBuilder();
        RestTemplate buildConsumer = builderConsumer.build();

        return buildConsumer;
    }

    @Scheduled(fixedRate = 3000)
    public void consumeAPI() {
        Model c = new Model();

        try {
            System.out.println("Started to Fetch API");

            c = restTemplateConsumer.getForObject("https://jsonplaceholder.typicode.com/posts/1", Model.class);

        } catch (NullPointerException e) {
            e.printStackTrace();
        }

    }    
}

我的Model.java如下所示

public class Model {


        int userId;
        int id ;
        String title;
        String body;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

我无法弄清空指针异常的原因是因为我的对象初始化,或者它无法将字符串解析为我的模型对象。

Stacktrace在下面:

  

java.lang.NullPointerException在   com.test.RestAPIConsumerController.consumeAPI(RestAPIConsumerController.java:40)     在   java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机   方法)   java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.base / java.lang.reflect.Method.invoke(Method.java:564)在   org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)     在   org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)     在   java.base / java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:514)     在   java.base / java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)     在   java.base / java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)     在   java.base / java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)     在   java.base / java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:635)     在java.base / java.lang.Thread.run(Thread.java:844)

预期行为: 代码的预期行为是将响应JSON成功解析为模型对象。

感谢您的帮助。

添加@Autowired解决了该问题

@Autowired
@Qualifier("restTemplateConsumer")
        private RestTemplate restTemplateConsumer;

1 个答案:

答案 0 :(得分:4)

将引发异常,因为restTemplateConsumer对象为null。您应该将@Qualifier注释与@Autowired一起使用

您可以阅读有关如何使用@Qualifier here

的更多信息。