从另一个类调用方法时发现客户端上的java.lang.NullPointerException
当我通过浏览器调用方法本身时,它正在工作,我得到了预期的从另一个类调用方法时发现客户端上的java.lang.NullPointerException,java,spring,rest,netflix-eureka,Java,Spring,Rest,Netflix Eureka,当我通过浏览器调用方法本身时,它正在工作,我得到了预期的JSON。因此,该方法正在工作,请求的服务已注册 @RequestMapping("/getArticle/{articleId}") public String getArticle(@PathVariable("articleId") Integer articleId) { // {"articleId":47,"name":"test","price":5.0} List<ServiceInstance
JSON
。因此,该方法正在工作,请求的服务已注册
@RequestMapping("/getArticle/{articleId}")
public String getArticle(@PathVariable("articleId") Integer articleId) {
// {"articleId":47,"name":"test","price":5.0}
List<ServiceInstance> instances =
discoveryClient.getInstances("articlemicroservice"); //null when calling
ServiceInstance serviceInstance = instances.get(0);
String baseUrl = serviceInstance.getUri().toString();
baseUrl = baseUrl + "/db/find/" + articleId.toString();
System.out.println("BASEURL: " + baseUrl);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = null;
try {
response = restTemplate.exchange(baseUrl, HttpMethod.GET,
getHeaders(), String.class);
} catch (Exception ex) {
System.out.println(ex);
}
// {"articleId":47,"name":"test","price":5.0}
String articleEntity = response.getBody().toString();
System.out.println("articleEntity: " + articleEntity);
return articleEntity;
}
例外情况:
java.lang.NullPointerException:null
在de.leuphana.jee.connector.jpa.behavior.ArticleMicroserviceRestConnectorRequester.getArticle(ArticleMicroserviceRestConnectorRequester.java:44)~[classes/:na]
…
在添加CartItemToCart
中,您创建了ArticleMicroserviceRestConnectorRequester
的新实例。它不是由Spring管理的,因此discoveryClient
不是自动连接的,它是空的
您必须将
ArticleMicroserviceRestConnectorRequester
注入到其他类中。因此,您将获得一个由Spring管理的实例,该实例应具有自动连线/插入的discoveryClient
在addCartItemToCart
中,您将创建ArticleMicroServiceRestConnectorRequest的新实例。它不是由Spring管理的,因此discoveryClient
不是自动连接的,它是空的
您必须将ArticleMicroserviceRestConnectorRequester
注入到其他类中。因此,您将得到一个由Spring管理的实例,该实例应该具有自动连接/注入的discoveryClient
显然discoveryClient
是null
。它是如何初始化/设置的?@Autowired private DiscoveryClient DiscoveryClient代码>当从另一个类调用方法时,它可能没有初始化,但是当调用方法本身时它被初始化了?但是如果我不明白原因,等一下。在addCartItemToCart
中,您创建了ArticleMicroserviceRestConnectorRequester
的新实例,对吗?它不是由Spring管理的,因此discoveryClient
不是自动连接的。所以它当然是null
。您必须将ArticleMicroserviceRestConnectorRequester
注入到另一个类中,以便它由Spring管理。是的,忘记使用@Autowired
。我不知道为什么我要用另一种方式初始化它。谢谢你们!显然,discoveryClient
是null
。它是如何初始化/设置的?@Autowired private DiscoveryClient DiscoveryClient代码>当从另一个类调用方法时,它可能没有初始化,但是当调用方法本身时它被初始化了?但是如果我不明白原因,等一下。在addCartItemToCart
中,您创建了ArticleMicroserviceRestConnectorRequester
的新实例,对吗?它不是由Spring管理的,因此discoveryClient
不是自动连接的。所以它当然是null
。您必须将ArticleMicroserviceRestConnectorRequester
注入到另一个类中,以便它由Spring管理。是的,忘记使用@Autowired
。我不知道为什么我要用另一种方式初始化它。谢谢你们!
@GetMapping(path = "/addCartItemToCart/{cartId}/{articleId}/{quantity}")
public @ResponseBody String addCartItemToCart(@PathVariable("cartId")
Integer cartId,
@PathVariable("articleId") Integer articleId,
@PathVariable("quantity") Integer quantity) {
ArticleMicroserviceRestConnectorRequester n = new
ArticleMicroserviceRestConnectorRequester();
String article = n.getArticle(articleId); //calling the method here
JSONObject json = new JSONObject(article);
CartItemEntity cartItemEntity = new CartItemEntity();
cartItemEntity.setArticleId(json.getInt("articleId"));
cartItemEntity.setQuantity(quantity);
cartItemEntity.setCartItemId(cartId);
CartEntity cartEntity = cartRepository.findById(cartId).get();
cartEntity.addCartItem(cartItemEntity);
cartEntity.setNumberOfCartItems(cartEntity.getNumberOfCartItems() +
cartItemEntity.getQuantity());
cartRepository.save(cartEntity);
return "Saved";
}