java服务端——controller控制器

控制器接口

控制器(controller)在系统或者插件下 controller 文件夹下,使用 springboot 开发,遵循 restfulapi 接口规范,开发之前请掌握相关知识

打开系统你会发现 controller 下又 adminapi,api,core 子项文件夹,这里是系统将不同的端口放在一起统一管理,包括后期插件开发也是分成不同端口。

接口使用 restfulapi 开发,命名为:主题+Controller,接口命名规范:adminapi(api)/插件或者模块名称/功能子项模块或者功能名称/功能名称/参数

例如:adminapi/member/member_accout/{id} 代表 adminapi 端口,会员模块,会员账户,对应 id的账户详情

adminapi/shop/goods/goods_category代表 adminapi 端口,商城插件,商品模块,商品分类

控制器基本结构

基础控制器实现

复制代码
@RestController
@RequestMapping("adminapi/shop/goods")
@Description("商品管理")
public class ShopGoodsController {

    @Resource
    IShopGoodsService goodsService;

    // 控制器方法...
}

核心注解说明

类级别注解:

复制代码
@RestController  // 标识为REST控制器,自动返回JSON
@RequestMapping("adminapi/shop/goods")  // 定义请求路径前缀
@Description("商品管理")  // JFR描述
@SaCheckLogin  // 权限控制,需要登录

方法级别注解:

复制代码
@GetMapping("")  // 处理GET请求
@PostMapping("")  // 处理POST请求  
@PutMapping("/{id}")  // 处理PUT请求
@DeleteMapping("/{id}")  // 处理DELETE请求
@Description("获取商品分页列表")

请求参数处理

路径参数

复制代码
@GetMapping("/{id}")
@Description("获取商品详情")
public Result<ShopGoodsInfoVo> info(@PathVariable("id") Integer id) {
    ShopGoodsInfoVo info = goodsService.info(id);
    return Result.success(info);
}

查询参数

复制代码
@GetMapping("")
@Description("获取商品分页列表")
public Result<PageResult<ShopGoodsListVo>> list(
        @Validated PageParam pageParam,  // 分页参数
        @Validated ShopGoodsSearchParam searchParam) {  // 搜索条件
    return Result.success(goodsService.page(pageParam, searchParam));
}

请求体参数

复制代码
@PostMapping("")
@Description("添加商品")
public Result<Object> add(@Validated @RequestBody ShopGoodsParam addParam) {
    goodsService.add(addParam);
    return Result.success();
}

复杂参数处理

复制代码
@GetMapping("/select")
@Description("获取商品选择分页列表")
public Result<ShopSelectGoodsListVo> getSelectPage(
        @Validated PageParam pageParam,
        @Validated ShopGoodsSelectSearchParam searchParam,
        @RequestParam(name = "goods_ids[]", required = false) List<Integer> goodsIds,
        @RequestParam(name = "sku_ids[]", required = false) List<Integer> skuIds) {
    searchParam.setGoodsIds(goodsIds);
    searchParam.setSkuIds(skuIds);
    return Result.success(goodsService.getSelectPage(pageParam, searchParam));
}

权限控制

类级别权限控制

复制代码
@RestController
@RequestMapping("adminapi/shop/goods")
@SaCheckLogin  // 整个控制器需要登录
public class ShopGoodsController {
    // ...
}

方法级别权限控制

复制代码
@PutMapping("/{id}/status")
@Description("修改商品状态")
@SaCheckPermission("shop:goods:status")  // 需要特定权限
public Result<Object> editStatus(@PathVariable("id") Integer id, @RequestBody StatusParam statusParam) {
    goodsService.editStatus(id, statusParam);
    return Result.success();
}

完整控制器示例

ShopGoodsController 完整实现

复制代码
package com.niu.shop.controller.adminapi.goods;

import com.niu.core.common.domain.Result;
import com.niu.core.common.param.PageParam;
import com.niu.core.common.vo.PageResult;
import com.niu.shop.service.admin.goods.IShopGoodsService;
import com.niu.shop.service.admin.goods.param.*;
import com.niu.shop.service.admin.goods.vo.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import jakarta.annotation.Resource;

@RestController
@RequestMapping("adminapi/shop/goods")
@Description("商品管理")
public class ShopGoodsController {

    @Resource
    IShopGoodsService goodsService;

    /**
     * 商品列表
     */
    @GetMapping("")
    @Description("获取商品分页列表")
    public Result<PageResult<ShopGoodsListVo>> list(
            @Validated PageParam pageParam,
            @Validated ShopGoodsSearchParam searchParam) {
        return Result.success(goodsService.page(pageParam, searchParam));
    }

    /**
     * 商品详情
     */
    @GetMapping("/{id}")
    @Description("获取商品详情")
    public Result<ShopGoodsInfoVo> info(@PathVariable("id") Integer id) {
        ShopGoodsInfoVo info = goodsService.info(id);
        return Result.success(info);
    }

    /**
     * 添加商品
     */
    @PostMapping("")
    @Description("添加商品")
    public Result<Object> add(@Validated @RequestBody ShopGoodsParam addParam) {
        goodsService.add(addParam);
        return Result.success();
    }

    /**
     * 编辑商品
     */
    @PutMapping("/{id}")
    @Description("编辑商品")
    public Result<Object> edit(@PathVariable("id") Integer id, @Validated @RequestBody ShopGoodsParam editParam) {
        goodsService.edit(id, editParam);
        return Result.success();
    }

    /**
     * 删除商品
     */
    @DeleteMapping("/{id}")
    @Description("删除商品")
    public Result<Object> del(@PathVariable("id") Integer id) {
        goodsService.del(id);
        return Result.success();
    }

    /**
     * 商品上下架
     */
    @PutMapping("/{id}/status")
    @Description("商品上下架")
    public Result<Object> editStatus(@PathVariable("id") Integer id, @RequestBody StatusParam statusParam) {
        goodsService.editStatus(id, statusParam);
        return Result.success();
    }

    /**
     * 商品回收站列表
     */
    @GetMapping("/recyclePage")
    @Description("商品回收站列表")
    public Result<PageResult<ShopGoodsListVo>> recyclePage(
            @Validated PageParam pageParam,
            @Validated ShopGoodsSearchParam searchParam) {
        return Result.success(goodsService.recyclePage(pageParam, searchParam));
    }

    /**
     * 商品恢复
     */
    @PutMapping("/{id}/recycle")
    @Description("商品恢复")
    public Result<Object> recycle(@PathVariable("id") Integer id) {
        goodsService.recycle(id);
        return Result.success();
    }

    /**
     * 商品彻底删除
     */
    @DeleteMapping("/{id}/destroy")
    @Description("商品彻底删除")
    public Result<Object> destroy(@PathVariable("id") Integer id) {
        goodsService.destroy(id);
        return Result.success();
    }

    /**
     * 批量彻底删除
     */
    @DeleteMapping("/destroyBatch")
    @Description("批量彻底删除")
    public Result<Object> destroyBatch(@RequestBody GetGoodsIdsParam getGoodsIdsParam) {
        goodsService.destroyBatch(getGoodsIdsParam);
        return Result.success();
    }
}
相关推荐
不平衡的叉叉树17 小时前
从JDK 1.8到JDK 21:实用新特性
java
23124_8017 小时前
热身签到-ctfshow
开发语言·python
鱼跃鹰飞17 小时前
Leetcode1027:最长等差数列
java·数据结构·算法
小白学大数据18 小时前
移动端Temu App数据抓包与商品爬取方案
开发语言·爬虫·python
吃吃喝喝小朋友18 小时前
JavaScript文件的操作方法
开发语言·javascript·ecmascript
2301_7973122618 小时前
学习Java42天
java·开发语言·学习
2501_9445264218 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 知识问答游戏实现
android·开发语言·javascript·python·flutter·游戏·harmonyos
chilavert31818 小时前
技术演进中的开发沉思-325 JVM:java体系技术全貌(下)
java·开发语言·jvm
chilavert31818 小时前
技术演进中的开发沉思-324 JVM:java技术体系全貌(上)
java·开发语言
pcm12356718 小时前
通信服务前沿知识
java