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);
}
}
说明
- listPage2方式中以GET方式接收请求参数时,使用了
@ModelAttribute注解,可以接收前台以application/x-www-form-urlencoded方式传过来的参数,此时不用使用@RequestBody注解,否则无法接收到,原因在于@RequestBody注解接收的请求数据类型为application/json; - listPage方式中以GET方式接收请求参数时,需要使用
@RequestParam注解一个一个接收,当请求参数变更时需要更改从前端控制器-服务-服务实现类-Dao服务的一系列接口参数的更改,建议采用listPage2方式。