java—在spring boot中使用http响应数据

jtw3ybtb  于 2021-07-23  发布在  Java
关注(0)|答案(2)|浏览(367)

我对springboot和web服务非常陌生。我实现了springboot应用程序来将产品保存到数据库中。很好用。现在我想用产品价格来做一些计算。
例如,我有所有产品的单价。当用户从前端选择产品和他想要购买的单位数时,我会将产品id和单位数传递给api方法,该方法将计算他想要支付的总金额。
我有下面的方法来获得产品的详细信息,根据产品id。

@GetMapping("/products/{id}")
public ResponseEntity<Product> getProductById(@PathVariable(value = "id") Long productId)
    throws ResourceNotFoundException {
    Product product = productRepository.findById(productId)
      .orElseThrow(() -> new ResourceNotFoundException("Product not found for this id :: " + productId));
    return ResponseEntity.ok().body(product);
}

它给了我以下的回答。
{“id”:8,“name”:“企鹅耳朵”,“cartonprice”:175,“unitprice”:9.0,“unitforcarton”:20}
所以我想在另一种方法中使用这个单价。我该怎么做?

dy2hfwbg

dy2hfwbg1#

通常是 Controller 呼叫 Service 层的逻辑,如果需要,调用 Repository 水平。
所以在你的情况下,你可以有一个 Service 使用的公共方法初始化 getProductById . 此方法返回一个对象。不是json。
这个 Controller 我会叫这个 service 类并将对象转换为json。
您的新端点将调用 Service 班级(也许吧) buyMe ?).
以及 buyMe 是一个位于同一位置的方法 Service 作为 getProductById . 所以从一个方法调用另一个方法很容易。

u0njafvf

u0njafvf2#

您应该遵循以下方法: Controller Service Repository 首先在 Controller 我们负责端点,并将工作委托给 Service . 对于您的用例,我将使用 DTO (数据传输对象)。基本上,您可以在一个java pojo中打包一些不同的属性,如下所示:

public class BuyEnquiryDto
{
    private int productId; // You could also pack these into an array if you have several Products
    private int quantity;

    // Getters and setters
}

然后在控制器中:

@Controller
public class Controller
{
    private ProductService productService;

    public Controller(ProductService productService)
    {
        this.productService = productService;
    }

    @GetMapping("/products/buyProduct")
    public ResponseEntity<Product> buyProduct(@RequestBody BuyEnquiryDto buyEnquiryDto )
    {
        return this.productService.buyProduct(buyEnquiryDto);
    }
}

然后我们就有了负责业务逻辑的服务:

public class ProductService
{
    private ProductRepo productRepo;

    public ResponseEntity<Product> buyProduct(BuyEnquiryDto buyEnquiryDto)
    {
        int productId = buyEnquiryDto.getProductId();

        productRepo.findById(productId).orElseThrow(...smth);

        /// Your logic continues here, you may also want to return something else, maybe the total price...
    }
}

相关问题