学成在线开发日志01(服务端查询所有页面接口开发、lombok的使用、MongoRepository分页Pageable的使用、SwaggerUI注解)


欢迎访问笔者个人技术博客: http://rukihuang.xyz/

CMS服务端工程搭建

1 导入基础工程

1.1 基础工程目录

  • parent:父工程,提供依赖管理
  • common:通用工程,提供各层封装
  • model:模型工程,提供统一的模型类管理
  • utils:工具类工程,提供项目的工具类
  • api:接口工程,统一管理项目的服务接口

在这里插入图片描述

在这里插入图片描述

2 #需求开发#

2.1 需求分析

  1. 分页查询CmsPage 集合下的数据
  2. 根据站点Id、模板Id、页面别名查询页面信息
  3. 接口基于Http Get请求,响应Json数据

2.2 定义接口

  • 在api工程中专门定义接口,方便接口的集中管理
@Api(value = "cms页面管理接口", description = "cms页面管理接口,提供页面的增删改查")
public interface CmsPageControllerApi {
    //页面查询
    @ApiOperation("分页查询列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "页码", required = true, paramType = "path", dataType = "int"),
            @ApiImplicitParam(name = "size", value = "每页记录数", required = true, paramType = "path", dataType = "int")
    })
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
}

2.3 创建cms模块(xc-service-manage-cms)

  • 包结构

在这里插入图片描述

2.3.1 application.yml
server:
  port: 31001 #服务器端口
spring:
  application:
    name: xc‐service‐manage‐cms #应用名
  data:
    mongodb: #数据库
      uri: mongodb://localhost:27017  
      database: xc_cms
2.3.2 ManageCmsApplication(SpringBoot启动类)
package com.xuecheng.manage_cms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@EntityScan("com.xuecheng.framework.domain.cms")//扫描实体类
@ComponentScan(basePackages = "com.xuecheng.api")//扫描接口
@ComponentScan(basePackages = "com.xuecheng.manage_cms")//扫描本项目下的所有类
public class ManageCmsApplication {
    public static void main(String[] args) {
        SpringApplication.run(ManageCmsApplication.class);
    }
}

2.3.3 CmsPageController
@RestController
@RequestMapping("/cms/page")
public class CmsPageController implements CmsPageControllerApi {
    @Autowired
    private IPageService pageService;

    @Override
    @GetMapping("/list/{page}/{size}")
    public QueryResponseResult findList(@PathVariable("page") int page, @PathVariable("size") int size, QueryPageRequest queryPageRequest) {
        //暂时使用静态数据进行测试
        /*QueryResult queryResult = new QueryResult();
        List<CmsPage> list = new ArrayList<>();
        CmsPage page1 = new CmsPage();
        list.add(page1);
        page1.setPageName("测试页面");
        queryResult.setList(list);
        queryResult.setTotal(list.size());
        QueryResponseResult responseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);*/

        return pageService.findList(page, size, queryPageRequest);
    }
}
2.3.4 PageServiceImpl
@Service
public class PageServiceImpl implements IPageService {
    @Autowired
    private CmsPageRepository cmsPageRepository;

    /**
     * 页面查询方法
     * @param page 传入的第1页,应该是数据库的第0条
     * @param size
     * @param queryPageRequest
     * @return
     */
    @Override
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) {
        if (queryPageRequest == null) {
            queryPageRequest = new QueryPageRequest();
        }

        //分页查询
        if (page <= 0) {
            page = 1;
        }
        page = page - 1;
        if (size <= 0) {
            size = 10;
        }
        Pageable pageable = PageRequest.of(page, size);
        Page<CmsPage> pages = cmsPageRepository.findAll(pageable);//分页查询

        QueryResult queryResult = new QueryResult();
        queryResult.setList(pages.getContent());//数据列表
        queryResult.setTotal(pages.getTotalElements());//数据总记录数
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
        return queryResponseResult;
    }
}
2.3.5 CmsPageRepository
public interface CmsPageRepository extends MongoRepository<CmsPage, String> {
    //CmsPageRepository有默认的findAll方法
}

学习总结

1 lombok的使用

1.1 简介

  • Lombok是一个实用的java工具,使用它可以消除java代码的臃肿,Lombok提供一系列的注解,使用这些注解可以不用定义getter/setter、equals、构造方法等,它会在编译时在字节码文件自动生成这些通用的方法,简化开发人员的工作。
  • 项目地址

1.2 使用方法

1.2.1 添加Lombok依赖
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
</dependency>
2.2.2 IDEA安装Lombok插件

在这里插入图片描述

1.2.3 模型中添加注解
@Data //自动生成 getter setter
@ToString //自动生成 toString()
@Document(collection = "cms_template") //SpringDataMongodb提供的注解,与Mongodb数据库中的集合进行匹配
public class CmsTemplate {

    //站点ID
    private String siteId;
    //模版ID
    @Id
    private String templateId;
    //模版名称
    private String templateName;
    //模版参数
    private String templateParameter;

    //模版文件Id
    private String templateFileId;
}

2 分页查询

@Service
public class PageServiceImpl implements IPageService {
    @Autowired
    private CmsPageRepository cmsPageRepository;

    /**
     * 页面查询方法
     * @param page 传入的第1页,应该是数据库的第0条
     * @param size
     * @param queryPageRequest
     * @return
     */
    @Override
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest) {
        if (queryPageRequest == null) {
            queryPageRequest = new QueryPageRequest();
        }

        //分页查询
        if (page <= 0) {
            page = 1;//当前页
        }
        page = page - 1;
        if (size <= 0) {
            size = 10;//一页展示的容量
        }
        //设置分页查询条件
        Pageable pageable = PageRequest.of(page, size);
        Page<CmsPage> pages = cmsPageRepository.findAll(pageable);//分页查询

        QueryResult queryResult = new QueryResult();
        queryResult.setList(pages.getContent());//数据列表
        queryResult.setTotal(pages.getTotalElements());//数据总记录数
        QueryResponseResult queryResponseResult = new QueryResponseResult(CommonCode.SUCCESS, queryResult);
        return queryResponseResult;
    }
}

2.1 设置Pageable分页条件

Pageable pageable = PageRequest.of(page, size);
Page<CmsPage> pages = cmsPageRepository.findAll(pageable);

3 Swagger-ui

3.1 Swagger-ui介绍

  • swagger是全球最大的OpenApi规范开发工具框架,支持从设计到文档到测试和部署的整个API生命周期
  • SpringBoot可以集成Swagger,生成Swagger接口。

3.2 Swagger常用注解

  • @Api:修饰整个类,描述Controller的作用
  • @ApiOperation:描述类中的一个接口
  • @ApiParam:单个参数描述
  • @ApiModel:用对象来接收参数
  • @ApuModelProperty:用对象接收参数时,描述对象的一个字段
  • @ApiResponse:HTTP响应其中1个描述
  • @ApiResponses:HTTP响应整体描述
  • @ApiIgnore:使用该注解忽略这个接口
  • @ApiError:发生错误返回的信息
  • @ApiImplicitParam:一个请求参数
  • @ApiImplicitParams:多个请求参数
3.2.1 @ApiImplicitParam 属性
属性取值作用
paramType查询参数类型
path以地址的形式提交数据
query直接跟参数完成自动映射赋值
body以流的形式提交,仅支持POST
header参数在request headers里边提交
form以form表单的形式提交,仅支持POST
dataType参数的数据类型,只作为标志说明,并没有实际验证
Long
String
name接收参数名
value接收参数的意义描述
required参数是否必填
true必填
false非必填
defaultValue默认值

3.3 Swagger接口定义

  • 接口API
@Api(value = "cms页面管理接口", description = "cms页面管理接口,提供页面的增删改查")
public interface CmsPageControllerApi {
    //页面查询
    @ApiOperation("分页查询列表")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "页码", required = true, paramType = "path", dataType = "int"),
            @ApiImplicitParam(name = "size", value = "每页记录数", required = true, paramType = "path", dataType = "int")
    })
    public QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
}
  • 实体类
@Data
public class QueryPageRequest {
    //接收页面查询的查询条件
    //站点id
    @ApiModelProperty("站点ID")
    private String siteId;
    //页面id
    @ApiModelProperty("页面id")
    private String pageId;
    //页面别名
    @ApiModelProperty("页面别名")
    private String pageName;
    //别名
    @ApiModelProperty("别名")
    private String pageAliase;
    //模板id
    @ApiModelProperty("模板id")
    private String templateId;
    //...
}

3.4 Swagger接口测试

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程的实战源码是我在 GitHub 上开源项目 spring-boot-projects 中的其中一个项目代码,目前已有 2300 多个 star,项目截图如下: 由于项目比较受大家欢迎,因此心中就出现了将它做成教学视频的想法,也就是你现在了解的这个课程《SpringBoot入门及前后端分离项目开发》,本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发。Spring Boot 介绍、前后端分离、API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力;这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,让大家实际操作并从无到有开发一个线上项目,并学习到一定的开发经验以及其中的开发技巧,旨在让读者具有将 Spring Boot 真正应用于项目开发的能力; 以下为实践项目的页面和功能展示,分别为:登录页面 列表页面(分页功能) 图片上传功能 富文本编辑器整合使用 实践项目的主要功能和页面就是这些,通过项目展示大家也能够感受到,在实际应用开发中的高频次功能都已经实现,稍加修改就可以运用到企业开发中,整个项目的开发模式为前后端分离的模式,即 Spring Boot 提供后端接口,前端页面通过 Ajax 异步调用接口的方式与后端服务器进行交互并将数据填充至页面中,这也是目前企业开发中比较重用的开发模式,希望大家能够了解并且能够实际的上手开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值