username);
UserController.java
5 分页查询参数
5.1 控制方法形参类型
在controller层的控制方法中利用 Pageable 对象去接收前端传过来的路径参数
技巧01:在springBoot项目中需要引入 spring-boot-starter-data-jpa 相关jar包才可以使用 Pageable 去接收分页查询参数
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
技巧02:Pageable 所在的包名为:import org.springframework.data.domain.Pageable;
技巧03:如果前端没有传入先关的参数,Pageable 是有默认值的,即使不用 @PageableDefault 指定默认值也是可以的(如果不指定:默认页码为第一页,默认每页记录数为20)
技巧04:Pagealbe 可以利用 @PageableDefault 设置默认值(即:前端不传入任何参数,直接使用开发者指定的数值),例如:
@PageableDefault(size = 14, page = 14, sort = "username", direction = Direction.DESC) Pageable pageable
5.2 前端传参
在前端直接在请求路径中利用 k-v 键值对传入即可,形如
技巧01:分页查询的参数变量必须是page、size、sort,分别代表页码、每页记录数、排序字段及其升降序;前端传入这三个参数,后台会自动封装到 Pageable 对象中
http://127.0.0.1:9999/test/page?page=12&size=23&sort=name,asc
疑惑01:后台明明时利用 Pageable 去接收前端的参数,为什么打印出来的日志信息却是一个 Page 对象;(理解:SpringMVC框架对Pageable进行了一次封装)
5.3 SpringJPA 中有直接进行分页查询的接口
参考文档:点击前往
6 JsonProperty
6.1 需求
当后台响应实体类的变量名和前台的需要的不一致时该如何解决;前端需要按照前端的变量规则来传,后端按照后端的变量规则来传,如何保证前后端的数据对应;例如:
》前端要求的对象格式
》后端要求的对象格式
6.2 解决办法
在定义后端的实体对象时利用 @JsonProperty 指定前端的变量名,例如:
package cn.xiangxu.product.VO;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import javax.persistence.Column;
import java.util.List;
* @author 王杨帅
* @create 2018-07-23 14:22
* @desc 商品类型视图
@Data
public class CategoryVO {
* 类目名字
@JsonProperty(value = "name")
private String categoryName;
* 类目编号
@JsonProperty(value = "type")
private Integer categoryType;
/** 商品视图列表 */
@JsonProperty(value = "foods")
private List<ProductVO> productVOList;
View Code
6.3 测试
6.3.1 准备
》创建一个SpringBoot项目,并引入lombok、spring-boot-starter-web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--日志、get\set\toString satrt-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--<version>1.18.0</version>-->
<!--<scope>provided</scope>-->
</dependency>
<!--日志、get\set\toString end-->
View Code
》编写视图类和视图类工具
》》响应视图类
技巧01:@Data注解的目的是自动生成get\set\toString等方法
坑01:利用IDEA开发时就算引入了lombok依赖,也在相关类中添加了@Data注解,但是启动应用时会报错;因为lombok会在应用打包时自动给我们生成相关方法,直接利用IDEA启动应用时那些方法还没有生成,所以会报错;解决办法是在IDEA中安装一个lombok插件
package cn.xiangxu.product.VO;
import lombok.Data;
* @author 王杨帅
* @create 2018-07-23 13:58
* @desc 数据封装视图
@Data
public class ResultVO<T> {
private Integer code;
private String msg;
private T data;
ResultVO
》》响应视图类工具
package cn.xiangxu.product.utils;
import cn.xiangxu.product.VO.ResultVO;
* @author 王杨帅
* @create 2018-07-23 14:06
* @desc 响应视图工具类
public class ResultVoUtil {
public static ResultVO success(Object data) {
ResultVO resultVO = new ResultVO();
resultVO.setCode(0);
resultVO.setMsg("请求成功");
resultVO.setData(data);
return resultVO;
View Code
》》数据视图类
package cn.xiangxu.product.VO;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import javax.persistence.Column;
import java.util.List;
* @author 王杨帅
* @create 2018-07-23 14:22
* @desc 商品类型视图
@Data
public class CategoryVO {
* 类目名字
@JsonProperty(value = "name")
private String categoryName;
* 类目编号
@JsonProperty(value = "type")
private Integer categoryType;
/** 商品视图列表 */
@JsonProperty(value = "foods")
private List<ProductVO> productVOList;
View Code
6.3.2 测试Get请求
6.3.3 测试POST请求
6.3.4 代码汇总
package cn.xiangxu.product.controller;
import cn.xiangxu.product.VO.CategoryVO;
import cn.xiangxu.product.VO.ResultVO;
import cn.xiangxu.product.utils.ResultVoUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
* @author 王杨帅
* @create 2018-07-23 15:51
* @desc 测试控制层
@RestController
@RequestMapping(value = "/test")
@Slf4j
public class TestController {
@GetMapping(value = "/connect")
public ResultVO connect() {
String result = "前后台连接成功";
log.info(result);
return ResultVoUtil.success(result);
@GetMapping(value = "/test01")
public ResultVO test01() {
CategoryVO categoryVO = new CategoryVO();
categoryVO.setCategoryName("熟食");
categoryVO.setCategoryType(2);
categoryVO.setProductVOList(null);
return ResultVoUtil.success(categoryVO);
@PostMapping(value = "/test02")
public ResultVO test02(
@RequestBody CategoryVO categoryVO
log.info("前端传过来的参数信息为:" + categoryVO);
return ResultVoUtil.success(categoryVO);
View Code