显示商品详情【项目 商城】

简介: 显示商品详情【项目 商城】

显示商品详情



1.商品显示商品详情持久层

1.1 规划查询的SQL语句

根据商品的id显示商品详情的SQL语句

SELECT * FROM t_product WHERE id=?

1.2 实现接口与抽象方法

在ProductMapper接口中添加抽象方法。

/* 根据商品id查询商品详情*/
    Product findById(Integer id);

1.3 配置SQL映射

1.在ProductMapper.xml文件中配置findById(Integer id)方法的映射。

    <!-- 根据商品id查询商品详情:Product findById(Integer id) -->
    <select id="findById" resultMap="ProductEntityMap">
        SELECT * FROM t_product WHERE id=#{id}
    </select>

ProductMapper–findById


测试

ProductMapperTests

package com.up.stores.mapper;
import com.up.stores.entity.Product;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductMapperTests {
    @Autowired
    private ProductMapper productMapper;
    @Test
    public void findHotList() {
        List<Product> list = productMapper.findHotList();
        System.out.println("count=" + list.size());
        for (Product item : list) {
            System.out.println(item);
        }
    }
    @Test
    public void findById() {
        Integer id = 10000017;
        Product result = productMapper.findById(id);
        System.out.println(result);
    }
}

ProductMapperTests


2.商品显示商品详情业务层

2.1 规划异常

如果商品数据不存在,一个抛出ProductNotFoundException,需要创建异常。

package com.cy.store.service.ex;
/** 商品数据不存在的异常 */
public class ProductNotFoundException extends ServiceException {
    public ProductNotFoundException() {
    }
    public ProductNotFoundException(String message) {
        super(message);
    }
    public ProductNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }
    public ProductNotFoundException(Throwable cause) {
        super(cause);
    }
    public ProductNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

ProductNotFoundException


2.2 实现接口与抽象方法

在业务层IProductService接口中添加findById(Integer id)抽象方法。

  /*根据商品id查询商品详情*/
    Product findById(Integer id);

2.3 实现抽象方法

1.在ProductServiceImpl类中,实现接口中的findByd(Integer id)抽象方法.

  @Override
    public Product findById(Integer id) {
        // 根据参数id调用私有方法执行查询,获取商品数据
        Product product = productMapper.findById(id);
        // 判断查询结果是否为null
        if (product == null) {
            // 是:抛出ProductNotFoundException
            throw new ProductNotFoundException("尝试访问的商品数据不存在");
        }
        // 将查询结果中的部分属性设置为null
        product.setPriority(null);
        product.setCreatedUser(null);
        product.setCreatedTime(null);
        product.setModifiedUser(null);
        product.setModifiedTime(null);
        // 返回查询结果
        return product;
    }

ProductService–findById


测试

package com.cy.store.service;
import com.cy.store.entity.Product;
import com.cy.store.service.ex.ServiceException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class ProductServiceTests {
    @Autowired
    private IProductService productService;
    @Test
    public void findHotList() {
        try {
            List<Product> list = productService.findHotList();
            System.out.println("count=" + list.size());
            for (Product item : list) {
                System.out.println(item);
            }
        } catch (ServiceException e) {
            System.out.println(e.getClass().getSimpleName());
            System.out.println(e.getMessage());
        }
    }
    @Test
    public void findById() {
        try {
            Integer id = 10000042;
            Product result = productService.findById(id);
            System.out.println(result);
        } catch (ServiceException e) {
            System.out.println(e.getClass().getSimpleName());
            System.out.println(e.getMessage());
        }
    }
}

**ProductServiceTests **


3.商品显示商品详情控制器

3.1 处理异常

在BaseController类中处理ProductNotFoundException

    else if (e instanceof ProductNotFoundException) {
            result.setState(4006);
            result.setMessage("商品数据不存在的异常");
        }

BaseController–ProductNotFoundException


3.2 设计请求

请求路径:/products/{id}/details
请求参数:@PathVariable("id") Integer id
请求类型:GET
响应结果:JsonResult<Product>

3.3 处理请求

1.在ProductController类中添加处理请求的getById()方法

  @GetMapping("{id}/details")
    public JsonResult<Product> getById(@PathVariable("id") Integer id) {
        // 调用业务对象执行获取数据
        Product data = productService.findById(id);
        // 返回成功和数据
        return new JsonResult<Product>(OK, data);
    }

ProductController–getById


测试

2.完成或启动项目,直接访问测试。

4 商品详情页–前端页面

1.检查在product.html页面body标签内部的最后是否引入jquery-getUrlParam.js文件,如果引入无需重复引入。

<script type="text/javascript" src="../js/jquery-getUrlParam.js"></script>

2.在product.html页面中body标签内部的最后,添加获取当前商品详情的代码。

    <script type="text/javascript">
      let id = $.getUrlParam("id");
      console.log("id=" + id);
      $(document).ready(function() {
        $.ajax({
          url: "/products/" + id + "/details",
          type: "GET",
          dataType: "JSON",
          success: function(json) {
            if (json.state == 200) {
              console.log("title=" + json.data.title);
              $("#product-title").html(json.data.title);
              $("#product-sell-point").html(json.data.sellPoint);
              $("#product-price").html(json.data.price);
              for (let i = 1; i <= 5; i++) {
                $("#product-image-" + i + "-big").attr("src", ".." + json.data.image + i + "_big.png");
                $("#product-image-" + i).attr("src", ".." + json.data.image + i + ".jpg");
              }
            } else if (json.state == 4006) { // 商品数据不存在的异常
              location.href = "index.html";
            } else {
              alert("获取商品信息失败!" + json.message);
            }
          }
        });
      });
      $("#btn-add-to-cart").click(function(){
        $.ajax({
          url: "/carts/add_to_cart",
          type: "POST",
          data: {
            "pid": id,
            "amount":$("#num").val()
          },
          dataType: "JSON",
          success: function(json) {
            if (json.state == 200) {
              alert("加入购物车成功!");
            } else {
              alert("加入购物车失败!");
            }
          },
          error: function(xhr) {
            alert("加入购物车产生未知异常" + xhr.message);
          }
        });
      });
    </script>

product.html


测试

完成后启动项目进行测试。

README–显示商品详情

相关文章
|
2月前
|
缓存 数据挖掘 API
商品详情API接口的应用实践
本文探讨了商品详情API接口在电商领域的应用实践,介绍了其作为高效数据交互方式的重要性,包括实时获取商品信息、提升用户体验和运营效率。文章详细描述了API接口的特点、应用场景如商品展示、SEO优化、数据分析及跨平台整合,并提出了缓存机制、分页加载、异步加载和错误处理等优化策略,旨在全面提升电商运营效果。
|
4月前
|
数据采集 API 开发工具
淘系商品详情数据解析(属性youhui券sku详情图等)API接口开发系列
在电商领域,特别是像淘宝(淘系)这样的平台,商品详情数据对于商家、开发者以及数据分析师来说至关重要。这些数据包括但不限于商品属性、优惠券信息、SKU(Stock Keeping Unit)详情、商品图片、售后保障等。然而,直接访问淘宝的内部API接口通常需要特定的权限和认证,这通常只对淘宝的合作伙伴或内部开发者开放。 不过,对于需要这些数据的第三方开发者或商家,有几种方式可以间接获取或解析淘系商品详情数据: ——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!
|
4月前
|
数据采集 JSON API
淘系商品详情图属性sku价格解析,API接口系列
淘宝(Taobao)作为阿里巴巴集团旗下的电商平台,其商品详情图、属性、SKU和价格的采集通常不直接通过公开的API接口来实现,因为淘宝的API主要面向商家和开发者提供店铺管理、订单处理、物流查询等功能,并不直接提供商品详情页的完整数据抓取接口
|
4月前
|
XML 存储 API
电商商品详情页面的获取,详情图属性sku价格的采集,API接口系列
在电商平台上,商品详情页面的获取,包括详情图、属性、SKU(Stock Keeping Unit,库存量单位)、价格等信息的采集,通常可以通过多种方式实现,其中之一是利用电商平台提供的API接口。以下是一个基于通用流程的概述,用于说明如何通过API接口系列来采集这些信息。
|
6月前
|
存储 JSON API
批量采集抖音商品详情数据:推荐你使用API(通过商品id取商品详情商品主图sku属性)
批量采集抖音商品详情,建议使用API接口。步骤包括:注册抖音开放平台获取App Key和Secret,调用商品详情API接口传入商品ID及相关参数,解析返回的JSON获取商品信息(如名称、价格、主图和SKU)。此外,接口列表提供商品搜索、销售量查询、历史价格、订单管理等多种功能。已封装的API接口地址:c0b.cc/R4rbK2,可测试并联系获取SDK文件。
|
SQL 存储 前端开发
显示购物车列表【项目 商城】
显示购物车列表【项目 商城】
141 0
|
JSON JavaScript 前端开发
使用商品详情API接口获取商品数据
在电子商务领域,商品详情API接口是一种常用的工具,用于从服务器获取特定商品的详细信息。通过使用这些API接口,开发人员可以轻松地获取商品的名称、价格、描述、图片等数据,从而为用户提供更好的购物体验。本文将详细介绍如何使用商品详情API接口来获取想要的商品数据,并提供相关的代码示例。
|
JSON 缓存 API
如何使用商品详情API接口来获取想要的商品数据?
在这篇文章中,我将详细介绍如何使用商品详情API接口来获取想要的商品数据。首先,我们需要了解API接口的基本概念和使用方法。然后,我们将探讨如何通过API接口获取商品数据,并给出示例代码。最后,我们将讨论如何优化API接口的使用,以提高获取商品数据的效率。
|
SQL XML 前端开发
收货地址列表展示【项目 商城】
收货地址列表展示【项目 商城】
112 0
|
前端开发 JavaScript
商城业务:商品详情
商城业务:商品详情