我在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;
答案 0 :(得分:4)
将引发异常,因为restTemplateConsumer对象为null。您应该将@Qualifier注释与@Autowired一起使用
您可以阅读有关如何使用@Qualifier here
的更多信息。