03.SpringBoot商城项目之加入购物车

1.自定义参数解析器

1.1.HandlerMethodArgumentResolver介绍

Spring MVC中,HandlerMethodArgumentResolver是一个接口,用于解析处理方法(handler method)的参数。它允许自定义参数的解析过程,以便从请求中提取参数值,并将其传递给处理方法。

Spring MVC接收到一个请求时,它会尝试匹配请求的URL路径和HTTP方法到相应的处理方法。在执行处理方法之前,Spring MVC会检查方法的参数,并根据参数的类型和注解来解析参数值。这是通过HandlerMethodArgumentResolver接口的实现类来完成的。

HandlerMethodArgumentResolver接口定义了以下方法:

boolean supportsParameter(MethodParameter parameter): 该方法确定是否支持解析给定的方法参数。可以根据参数类型、注解或其他条件来确定是否支持解析该参数。
Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception: 该方法用于解析方法参数的值。可以根据需要从请求、会话、Cookie等获取参数的值,并将其转换为适当的类型。

通过自定义HandlerMethodArgumentResolver的实现类,可以扩展Spring MVC的参数解析功能,以满足特定的业务需求。例如:可以实现一个解析器来提取JWT令牌并验证其有效性,然后将解析后的用户信息传递给处理方法。

总结:HandlerMethodArgumentResolverSpring MVC中的一个接口,用于自定义处理方法参数的解析过程。通过实现该接口,可以扩展参数解析功能,以满足特定的业务需求。

1.2.自定义参数解析器

1.2.1.创建自定义参数解析类

创建自定义参数解析类UserArgumentResolver,并实现HandlerMethodArgumentResolver接口:

   

@Component
    public class UserArgumentResolver implements HandlerMethodArgumentResolver {
    
        @Override
        public boolean supportsParameter(MethodParameter methodParameter) {
            ...
        }
    
        @Override
        public Object resolveArgument(MethodParameter methodParameter,
                                      ModelAndViewContainer modelAndViewContainer,
                                      NativeWebRequest nativeWebRequest,
                                      WebDataBinderFactory webDataBinderFactory) throws Exception {
            ...                  
        }
    }

通过自定义参数解析器实现对请求方法参数进行自定义解析,说白了就是对指定方法中的指定参数进行解析,用于登录Token令牌验证。

具体实现思路分析:

通过request请求对象获取存储在cookie中的token令牌;
  
判断token令牌是否为空,若为空,则抛异常并提示令牌无效;
  
根据token令牌从redis中获取存储的用户对象信息,若存在,则有效;反之,无效。
  

1.2.2.注册自定义参数解析器

要使用HandlerMethodArgumentResolver,需要将其注册到Spring MVC配置中。这可以通过使用WebMvcConfigurer接口的addArgumentResolvers方法来完成。如下:

   

 @Component
    public class WebConfig implements WebMvcConfigurer {
    
        @Autowired
        private UserArgumentResolver userArgumentResolver;
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
            resolvers.add(userArgumentResolver);
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //添加静态资源访问映射
            registry.addResourceHandler("/static/**")
                    .addResourceLocations("classpath:/static/");
        }
    }

1.2.3.验证测试

IndexController中定义测试方法:

   

@RequestMapping("/tokenTest")
    public void tokenTest(User user){
        System.out.println(user);
    }

重启项目,访问测试接口。可以发现在没有验证成功的情况下,将提示令牌无效;验证成功的情况下,则可以成功的得到User对象信息。

2.商品详情

配置首页商品详情接口:

   

@RequestMapping("/queryGoodsByGid")
    public ModelAndView queryGoodsByGid(Goods goods){
        ...
    }

然后,请修改proDetail.html页面,展示商品详情信息。

注意:

${goods.goodsTitle!}:只能判断goodsTitle属性是否为空,不能判断goods对象是否为空
  
${(goods.goodsTitle)!}:既可以判断goods对象是否为空,也可以判断goodsTitle属性是否为空
  

 3.加入购物车

3.1.创建购物车商品实体类

   

 public class ShopCarItem implements Serializable {
    
        //商品编号
        private Long gid;
        //商品名称
        private String goodsName;
        //商品价格
        private BigDecimal goodsPrice;
        //商品图片
        private String goodsImg;
        //商品数量
        private Integer quantity;
    
    }

并在实体类中定义计算商品小计的方法:

   

/**
     * 商品小计计算
     * @return
     */
    public BigDecimal smallprice(){
        BigDecimal num=new BigDecimal(this.quantity);
        return num.multiply(this.goodsPrice);
    }

BigDecimal类型不能直接通过运算符方式进行加减乘除操作,必须通过它内置的方法进行计算。

3.2.Redis购物车快速入门

本次案例采用Redis的Hash类型实现Redis版本的购物车功能。

首先,在IRedisService中定义以下两个方法:

   

 public interface IRedisService {
    
       /**
         * 根据用户ID将商品存储到Redis中
         * @param userId       用户ID
         * @param shopCarItem  商品对象
         */
        void addCart(Long userId, ShopCarItem shopCarItem);
    
        /**
         * 根据用户ID获取Redis中的所有商品信息
         * @param userId 用户ID
         * @return
         */
        List<ShopCarItem> getAllCarts(Long userId);
    }

addCart方法根据用户ID+商品对象进行存储(采用的是RedisHash类型方式)。注意:这里在加入购物车时,要判断是否存在同类型的商品:如果存在,则该商品在购物车中的数量+1;如果不存在,则直接将商品加入到购物车中。
  
getAllCarts方法根据用户ID获取该用户的Redis购物车信息。
  

3.3.实现加入购物车功能

第一步:在加入购物车时,必须判断是否已登录状态,只有登录状态的用户才能加入购物车;

第二步:选择指定商品,点击加入购物车将商品;

第三步:加入购物车成功之后,跳转到购物车页面展示购物车中的商品信息;

   

@Controller
    @RequestMapping("/shopCar")
    public class ShopCarController {
    
        /**
         * 第一步:该方法专门用于购物车购买是否登录验证
         * @param user
         * @return
         */
        @RequestMapping("/check")
        @ResponseBody
        public JsonResponseBody<?> check(User user){
            return new JsonResponseBody<>();
        }
    
        /**
         * 第二步:加入购物车
         * @param user 当前登录对象
         * @param gid  商品ID
         * @return
         */
        @RequestMapping("/add")
        @ResponseBody
        public JsonResponseBody<?> add(User user,Long gid){
            //1.根据商品ID获取商品详情
            ...
            //2.创建ShopCarItem
            ...
            //3.调用Redis加入购物车方法,加入购物车
            ...
            return new JsonResponseBody<>();
        }
    
    
        /**
         * 第三步:查询购物车中的商品
         * @param user
         * @param session
         * @return
         */
        @RequestMapping("/queryShopCar")
        public ModelAndView queryShopCar(User user){
            ModelAndView mv=new ModelAndView();
            //从Redis中根据用户ID获取购物车商品集合,并返回到前端页面进行展示
            ...
            return mv;
        }
    }

  • 31
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spring Boot商城项目是使用Spring Boot框架开发的电子商务平台。它可以帮助开发人员快速构建基于微服务架构的高效、稳定、可扩展的商城系统。该项目通常包含以下功能:用户管理、商品管理、购物车、订单管理、支付系统、物流管理等。 ### 回答2: SpringBoot商城项目是一个使用SpringBoot框架开发的电商平台,可以实现用户注册登录、商品浏览、购物车管理、订单管理等功能。 首先,用户可以通过注册登录功能进行账户的创建和登录。用户注册时需要填写一些基本信息,如用户名、密码、手机等,然后使用这些信息进行登录。登录后,用户可以浏览商品、加入购物车、下订单等操作。 其次,商城项目还提供了商品浏览功能。用户可以按照不同的分类、价格等条件浏览商品,查看商品的详细信息,如图片、价格、库存等。用户可以通过搜索功能找到特定的商品,并可以将感兴趣的商品加入购物车。 再次,购物车管理功能允许用户将商品加入或从购物车中删除。用户可以随时查看购物车中的商品数量和总价,还可以修改商品的数量。用户可以选择结算购物车内的商品,生成订单。 最后,商城项目还提供了订单管理功能。在结算购物车中的商品后,会生成订单,用户可以查看订单的详细信息,如订单号、商品明细、收货地址等。用户还可以取消订单、查看物流信息等操作。 总之,SpringBoot商城项目通过使用SpringBoot框架来简化开发,实现了用户注册登录、商品浏览、购物车管理、订单管理等功能,为用户提供了一个完善的电商平台

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值