SpringBoot

SpringBoot接收参数场景

2024-06-18  本文已影响0人  静美书斋

常用接收参数见深入解析SpringBoot接收参数的19种方法:全面覆盖经典与进阶场景

这里针对文中提到的在GET请求方法中使用对象接收参数进行场景使用。

一、需求

    针对分页请求接口,要求全局分页请求参数继承分页参数基类,该基类中定义了当前页和分页数,后续可以追加如排序字段、排序方式等

二、步骤

1.定义分页参数对象基类(PageObject)

package cn.keyidea.common.bean;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;

/**
 * 分页基类 分页参数对象
 *
 * @author qyd
 * @date 2024-06-05
 */
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Schema(name = "PageObject", description = "分页对象")
public class PageObject implements Serializable {

    // 前端实际使用天基三期(React)写法当前页使用的是page
    @NotNull(message = "当前页不能为NULL")
    @Schema(description = "当前页,默认1", name = "page", example = "1", type = "integer", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer page;

    @NotNull(message = "分页数不能为NULL")
    @Schema(description = "分页数,默认15", name = "pageSize", example = "15", type = "integer", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer pageSize;

    @Schema(description = "排序字段", name = "orderBy", example = "", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private String orderBy;

    @Schema(description = "排序方式:false-asc,true-desc", name = "desc", type = "boolean", example = "false", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
    private Boolean desc;
}

2.定义请求实体

以用户请求(UserReq)实体进行示例

package cn.keyidea.second.vo;

import cn.keyidea.common.bean.PageObject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import lombok.experimental.SuperBuilder;

/**
 * 用户请求VO
 *
 * @author qyd
 * @date 2024-06-05
 */
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Schema(name = "UserReq", description = "用户请求VO")
public class UserReq extends PageObject {

    @Schema(description = "用户名称,支持模糊查询", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "名称1")
    private String userName;

}

3.用户分页请求接口

package cn.keyidea.second.controller;

import cn.keyidea.common.annotation.SysLogAnnotation;
import cn.keyidea.common.bean.BaseRes;
import cn.keyidea.common.constant.ConstantsExpand;
import cn.keyidea.second.entity.User;
import cn.keyidea.second.service.UserService;
import cn.keyidea.second.vo.UserReq;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * <p>
 * 测试控制器
 * </p>
 *
 * @author qyd
 * @since 2024-06-05
 */
@ApiSupport(order = 99)
@Tag(name = "99-测试管理(无需理会)", description = "测试管理")
@RestController
@RequestMapping("/test")
public class TestController {

    private final static Logger logger = LoggerFactory.getLogger(TestController.class);

    @Autowired
    private UserService userService;


    @SysLogAnnotation(module = "用户管理", serviceDesc = "分页查询(Get接收对象参数)", serviceType = ConstantsExpand.ServiceType.QUERY)
    @ApiOperationSupport(author = "qyd", order = 1)
    @Operation(summary = "分页查询(Get接收对象参数)")
    @GetMapping("listPage2")
    public BaseRes<BaseRes.DataList<User>> listPage2(@Valid @ModelAttribute("req") UserReq req) {
        return userService.listPage2(req);
    }

    @SysLogAnnotation(module = "用户管理", serviceDesc = "分页查询", serviceType = ConstantsExpand.ServiceType.QUERY)
    @ApiOperationSupport(author = "qyd", order = 1)
    @Operation(summary = "分页查询")
    @Parameters({
            @Parameter(name = "userName", description = "用户名称", required = false, example = "1", in = ParameterIn.DEFAULT),
            @Parameter(name = "current", description = "当前页", required = true, example = "1", in = ParameterIn.DEFAULT),
            @Parameter(name = "pageSize", description = "分页数", required = true, example = "15", in = ParameterIn.DEFAULT)
    })
    @GetMapping("listPage")
    public BaseRes<BaseRes.DataList<User>> listPage(@RequestParam(value = "userName", required = false) String userName,
                                                    @RequestParam(value = "current", required = true, defaultValue = "1") Integer pageNumber,
                                                    @RequestParam(value = "pageSize", required = true, defaultValue = "15") Integer pageSize) {
        Page<User> page = new Page<>(pageNumber, pageSize);
        return userService.listPage(page, userName);
    }

}

说明

上一篇 下一篇

猜你喜欢

热点阅读