Spring Boot电商项目23:商品分类模块二:【增加目录分类】接口;(接收请求中的、放在body中的参数时候,使用了@RequestBody;)

说明:

(1)本篇博客需要注意的点:

          ● 对于Spring Boot来说,POST请求时,更建议使用【@RequestBody 实体类】的方式,去接收参数;(这一点还有不清晰的地方,需要回来修正);(是不是如果请求参数很多的时候,参数就尽量不要放在url后面,否则的话会很长;更好的做法就是,把参数通过JSON的方式,放在body中;;;那么,与此对应,Controller就需要使用@RequestBody来接收参数)

          ● 【承接数据表的实体类】和【接收参数的实体类】,要分别创建,不要混用;

          ● Controller拿到参数后,需要首先校验下参数是否为空;本篇博客中,还是采用笨笨的方式去校验;后面会介绍【@Valid注解】;

          ● 【增加目录分类】接口要求:【用户必须登录,且该用户需要是管理员用户】;我们需要编写对应的逻辑;

          ● 我们的自定义异常ImoocMallException,在逻辑上其实是运行时异常;那么为了更方便的处理这个异常,可以让ImoocMallException继承RuntimeException;关于这个内容,在【附加:自定义异常,继承Exception和RuntimeException的区别;(本篇是转载博客,慎看)】做了详细介绍;

          ● 这儿介绍了一个中快速拷贝复制对象属性的工具:【BeanUtils.copyProperties(obj1, obj2)】;

          ●【增加目录分类】接口要求:不允许分类名重复;

          ● 针对【POST请求,有的参数放在了url后面,有的放在了body中】;针对这个迷惑点,自己在【附加:【POST请求:方法参数放在url中和放在body中,有什么区别】;也包括【@Param,@RequestParam,@RequestBody这三个【与接收参数有关】的注解,总结】;】中,进行了详细介绍;同时在这篇博客中,也详细总结了@Param,@RequestParam,@RequestBody这三个【与接收参数有关】的注解;

目录

一:【增加目录分类】接口:说明;

二:正式开发;

1.创建CategoryController,并创建【增加目录分类】的方法:addCategory()方法;

(1)对于Spring Boot来说,POST请求时,更建议使用【@RequestBody 实体类】的方式,去接收参数;

(2)方法,首先需要校验:参数不能为空;即,入参校验;(PS:自己做过的项目中,有的地方,这个工作是交给前端的)

(3)身份校验:因为这个接口要求【用户必须登录,而且该用户需要是管理员用户】;

(4)如果不是管理员:就返回【无管理员权限】的信息;如果是管理员用户,就去调用Service对应的逻辑;如果一切正常,就返回成功的API统一返回对象;

2.创建CategoryServiceImpl实现类、CategoryService接口;创建并实现【增加目录分类】方法:add()方法;

(1)【BeanUtils.copyProperties(obj1, obj2)】:如果属性类型、属性名一样的话;其可以,快速把obj1的拷贝到Obj2中;

(2)【增加目录分类】的时候,也不允许重名;所以,增加之前,要看下数据库中是否已经有这个分类名了;(PS:需要在Dao层,创建一个【根据目录名,查询目录】的方法;)

(3)调用Dao层的insertSelective()去新增目录;

(4)说明:我们前面的自定义异常ImoocMallException,可以改继承RuntimeException;(这是个知识点)

(5)在ServiceImpl中,写好方法的实现后;要在Service接口中,反向生成方法的声明;

3.启动程序,测试;


一:【增加目录分类】接口:说明;

这儿需要说明:请求中的body,是什么意思;和前面的没有body的区别;


二:正式开发;

1.创建CategoryController,并创建【增加目录分类】的方法:addCategory()方法;

CategoryController类:

package com.imooc.mall.controller;

import com.imooc.mall.common.ApiRestResponse;
import com.imooc.mall.common.Constant;
import com.imooc.mall.exception.ImoocMallExceptionEnum;
import com.imooc.mall.model.pojo.User;
import com.imooc.mall.model.request.AddCategoryReq;
import com.imooc.mall.service.CategoryService;
import com.imooc.mall.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;

/**
 * 描述:商品分类Controller
 */
@Controller
public class CategoryController {
    @Autowired
    UserService userService;
    @Autowired
    CategoryService categoryService;

    /**
     * 增加目录分类
     *
     * @param session
     * @param addCategoryReq
     * @return
     */
    @PostMapping("/admin/category/add")
    @ResponseBody
    public ApiRestResponse addCategory(HttpSession session, @RequestBody AddCategoryReq addCategoryReq) {
        //校验入参,如果为空就返回【参数不能为空】的信息
        if (addCategoryReq.getName() == null ||
                addCategoryReq.getOrderNum() == null ||
                addCategoryReq.getParentId() == null ||
                addCategoryReq.getType() == null) {
            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME.NAME_NOT_NULL);
        }

        //尝试获取当前登录用户
        User currentUser = (User) session.getAttribute(Constant.IMOOC_MALL_USER);
        //如果获取不到,说明当前没有用户登录;就返回【用户未登录】的信息
        if (currentUser == null) {
            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_LOGIN);
        }
        //校验当前用户是否是管理员用户
        boolean isAdminRole = userService.checkAdminRole(currentUser);

        if (isAdminRole) {//如果是管理用户;就去执行【增加目录分类】;
            categoryService.add(addCategoryReq);
            return ApiRestResponse.success();
        } else {//如果不是管理员用户;就返回【无管理员权限】的信息
            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_ADMIN);
        }
    }
}

说明: 

(1)对于Spring Boot来说,POST请求时,更建议使用【@RequestBody 实体类】的方式,去接收参数;

先看下这个接口的参数 :

如果,我们采用前面的【@RequestParam("") 参数】的方式去接收参数,那么我们就需

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值