首页 > 解决方案 > 如何在另一个 RestControler 中使用 RestControler 函数

问题描述

当我在 ProductRestService 中调用 SaleRestService 时,我得到 org.springframework.beans.factory.UnsatisfiedDependencyException,如下面的代码所示。

我怎样才能正确地做到这一点?

@RestController
@CrossOrigin("*")
public class ProductRestService {
    @Autowired
    private ProductRepository productRepository;
    @Autowired
    public SaleRestService saleRestService ; 

    @RequestMapping(value="/productQuatityMinusOne", method=RequestMethod.GET)
    @ResponseBody
    public void ProductQuatityMinusOne(@RequestParam(name="id") Long id){
        Product p = productRepository.findProductById(id);
        double salePrice = p.getPrice();
        Date now = new java.util.Date();
        Sale s = new Sale(id,salePrice,now);
        saleRestService .saveOneSale(s);
        p.setId(id);
        int q = p.getQuantity()-1;
        p.setQuantity(q);
        productRepository.save(p);
    }
}

@RestController
@CrossOrigin("*")
public class SaleRestService {

    @Autowired
    private SaleRepository saleRepository; 

    //Save one sale
    @RequestMapping(value="/saveOneSale", method=RequestMethod.POST)
    @ResponseBody
    public Sale saveOneSale(@RequestBody Sale s){
         return saleRepository.save(s);
    }
}

标签: javahibernatespring-boot

解决方案


你不应该互相调用你的控制器。

两种解决方案:

  • 将 saveOneSale 的代码放在另一个 @Service 中,然后从您的 @RestControllers 调用它
  • 您可以使用 Spring Boot 重定向将 ProductRestService 中 ProductQuatityMinusOne 的 http 调用重定向到 SaleRestService 中的 saveOneSale return "redirect:/saveOneSale";,但我不知道这是否可行,因为您将重定向到 POST 处理程序。

我个人会做第一个解决方案:

  • 从 SaleRestService 中删除 @RestController
  • 创建一个 SaleRestController 类,使用@RestController 对其进行注解,并使用以下注解放置一个方法:@RequestMapping(value="/saveOneSale", method=RequestMethod.POST)
  • 在该方法中,调用 SaleRestService.saveOneSale

一切都应该正常工作(TM)


推荐阅读