java - 如何在另一个 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);
}
}
解决方案
你不应该互相调用你的控制器。
两种解决方案:
- 将 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)
推荐阅读
- python - 只接受 CSV 输入,否则在 pandas 中抛出错误
- amazon-web-services - 如何减少 aws cloudwatch 中的 GetMetricStatistics 调用次数和 ListMetrics 调用次数?
- windows - 如何设置默认子程序来处理windows中未定义的命令?
- python - 使用字典在python中打印图形中可能的所有路径
- javascript - 上午图表项目符号重叠
- vaadin - 如何将点击侦听器或上下文菜单添加到 Vaadin 的 Grid 列标题
- python - 调用 get() 后 Python 线程安全队列如何工作
- r - 我的对象已定义但不存在。如何解决问题?
- java - 在 AES 上解密时出现错误的 base64 错误
- gradle - 测试运行时类路径不包含插件元数据文件“plugin-under-test-metadata.properties”