云尚办公-0.0.3

5. controller层

import pers.beiluo.yunshangoffice.model.system.SysRole;
import pers.beiluo.yunshangoffice.service.SysRoleService;

import java.util.List;

//@RestController:1.该类是控制器;2.方法返回值会被写进响应报文的报文体,而不是作为视图解析
@RestController
@RequestMapping("admin/system/sysRole")
public class SysRoleController {

    @Autowired
    private SysRoleService sysRoleService;

    @GetMapping("/getAll")
    public List<SysRole> getAllRole(){
        List<SysRole> list = sysRoleService.list();
        return list;
    }

}

在这里插入图片描述

6. 定义统一返回结果对象

项目中会将响应封装成json返回,为了使得后端所有接口返回的内容有一个规范,就需要定义统一的返回结果格式,这个类定义在common-util模块下。
在这里插入图片描述

//返回结果自定义状态码枚举类型
package pers.beiluo.yunshangoffice.result;

import lombok.Getter;

@Getter
public enum ResultCodeEnum {

    SUCCESS(200,"成功"),
    FAIL(201, "失败"),
    ;

    private Integer code;
    private String message;

    private ResultCodeEnum(Integer code,String message){
        this.code = code;
        this.message = message;
    }

}
//定义类用于得到返回结果
package pers.beiluo.yunshangoffice.common.result;

import lombok.Data;

/**
 * 结果格式为:
 *      返回码
 *      返回信息
 *      返回数据
 * @param <T>
 */
@Data
public class Result <T>{

    //返回码
    private Integer code;

    //返回消息
    private String message;

    //返回数据
    private T data;

    public Result(){}

    //构建返回结果
    public static<T> Result<T> build(T data,ResultCodeEnum resultCodeEnum){
        Result<T> TResult = new Result<>();
        if(data != null){
            TResult.setData(data);
        }
        TResult.setCode(resultCodeEnum.getCode());
        TResult.setMessage(resultCodeEnum.getMessage());
        return TResult;
    }

    //操作成功
    public static <T> Result<T> ok(){
        return build(null, ResultCodeEnum.SUCCESS);
    }

    public static <T> Result<T> ok(T data){
        return build(data,ResultCodeEnum.SUCCESS);
    }

    //操作失败
    public static <T> Result<T> fail(){
        return build(null,ResultCodeEnum.FAIL);
    }

    public static <T> Result<T> fail(T data){
        return build(data,ResultCodeEnum.FAIL);
    }

}

定义了统一返回对象后,需要修改controller层,使得控制器返回的结果都是定义好的类型。

package pers.beiluo.yunshangoffice.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import pers.beiluo.yunshangoffice.common.result.Result;
import pers.beiluo.yunshangoffice.model.system.SysRole;
import pers.beiluo.yunshangoffice.service.SysRoleService;

import java.util.List;

//@RestController:1.该类是控制器;2.方法返回值会被写进响应报文的报文体,而不是作为视图解析
@RestController
@RequestMapping("admin/system/sysRole")
public class SysRoleController {

    @Autowired
    private SysRoleService sysRoleService;

//    @GetMapping("/getAll")
//    public List<SysRole> getAllRole(){
//        List<SysRole> list = sysRoleService.list();
//        System.out.println(list);
//        return list;
//    }
    public Result<List<SysRole>> getAllRole(){
        List<SysRole> list = sysRoleService.list();
        return Result.ok(list);
    }

}

在这里插入图片描述

7. 整合knife4j

**注意:**版本过高的springboot和swagger无法兼容,导致程序会报错,写项目的目的是熟悉开发过程,加强对框架的使用,关注点并不在解决这个调试框架的不兼容问题上,所以最好的办法是先降低springboot的版本到2.3.x。这个问题可以完成项目后再研究。
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。它方便我们发送请求并对接口进行测试。下面将knife4j集成到service-util模块。以下内容都放在service-util模块中。

  1. 在service-util模块中引入依赖
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
  1. 添加knife4j配置类
package pers.beiluo.yunshangoffice.common.config.knife4j;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

import java.util.ArrayList;
import java.util.List;

/**
 * knife4j配置信息
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {

    @Bean
    public Docket adminApiConfig(){
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder tokenPar = new ParameterBuilder();
        tokenPar.name("token")
                .description("用户token")
                .defaultValue("")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(tokenPar.build());
        //添加head参数end

        Docket adminApi = new Docket(DocumentationType.SWAGGER_2)
                .groupName("adminApi")
                .apiInfo(adminApiInfo())
                .select()
                //只显示admin路径下的页面
                //注意这个basePackage要写成自己的包
                .apis(RequestHandlerSelectors.basePackage("com.atguigu"))
                .paths(PathSelectors.regex("/admin/.*"))
                .build()
                .globalOperationParameters(pars);
        return adminApi;
    }

    private ApiInfo adminApiInfo(){

        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统微服务接口定义")
                .version("1.0")
                .contact(new Contact("atguigu", "http://atguigu.com", "atguigu@qq.com"))
                .build();
    }


}

在这里插入图片描述

  1. 在controller层添加注解
    • 在类上添加@Api注解,表示这是一个swagger资源,并且可以通过tags属性为这个类添加说明。
    • 在方法上添加@ApiOperation注解,通过value属性给接口命名。
  2. 访问localhost:8800/doc.html就能看到测试页面。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/417140.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

arr与arr的区别

一、定义区别 arr表示数组首元素地址 &arr表示整个数组&#xff0c;取出的是整个数组的地址&#xff08;也叫数组指针&#xff09; 二、二者偏移量不同 arr与&arr都指向数组的首地址 arr偏移量为一个int的大小 arr1&#xff1a;指向下一个元素的地址 &arr偏移…

小而巧的数字压缩算法:zigzag

阅读facebook开源的 RPC&#xff08;Remote Procedure Call&#xff09; 框架thrift源代码的时候&#xff0c;本来是在阅读框架&#xff0c;却不小心被 zigzag 这个钻石般闪耀的代码吸引。后来去百度搜索zigzag&#xff0c;却得到满屏图像相关的一个算法&#xff08;看来起名字…

Google checkstyle实战

概述 CheckStyle检查代码是否符合制定的规范。CheckStyle检查是基于源码的&#xff0c;无需编译&#xff0c;执行速度快。 CheckStyle的主要流程是&#xff1a; 对Java文件进行词法语法分析&#xff0c;生成语法树。载入配置文件&#xff08;checkstyle-metadata.xml以及自定…

【C++】认识类和对象

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、什么是面向对象&#xff1f;二、类的引入三、类的定义四、类的访问限定符与…

(C语言)Sleep函数,system函数,数组练习,详解与运用

一维数组详解&#xff1a;http://t.csdnimg.cn/zahZF 二维数组详解&#xff1a;http://t.csdnimg.cn/h2mLe 我们看过可一维数组与二维数组&#xff0c;现在我们来进行简单的练习。 题目&#xff1a;编写代码&#xff0c;演⽰多个字符从两端移动&#xff0c;向中间汇聚 1. …

AI大模型 拍照搜题

最近&#xff0c;发现一款小程序【问智通】&#xff0c;实现了拍照搜题结合AI大模型&#xff0c;省去了打字和敲数学公式向AI提问&#xff0c;完美的补充了其它拍照搜题平台拍不到&#xff0c;没解析等不足&#xff01;&#xff01;&#xff01; 小程序码&#xff1a; APP下载…

Python:运算符、内置函数和序列基本用法

一、学习目标 1&#xff0e;熟练使用Python运算符。 2&#xff0e;熟练使用Python内置函数。 3&#xff0e;掌握输入、输出函数的使用方法。 4&#xff0e;了解列表、元组、字典、集合的概念和基本用法。 二、相关练习 1&#xff0e;输入一个自然数250&#xff0c;输出其…

如何识别代理服务器的IP地址?

识别一个IP地址是否是由代理服务器发出的&#xff0c;是一项具有挑战性的任务。代理服务器是一种中间网络设备&#xff0c;用于转发客户端的请求和响应&#xff0c;从而隐藏原始客户端的IP地址。由于代理服务器的广泛使用&#xff0c;识别它们对于网络安全、数据分析和市场调研…

【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增

昨天遇到了一个比较奇怪的问题&#xff0c;就是在挂起虚拟机的时候&#xff0c;虚拟机提示我XX脚本正在运行&#xff0c;很奇怪&#xff0c;我没有运行脚本&#xff0c;为什么会提示我这个呢。今天恢复虚拟机&#xff0c;也提示了一下脚本的问题&#xff0c;而且发现Linux明显异…

爬取一人之下所有图片网址以及图片的源代码

将网址保存到join中&#xff0c;图片源代码保存到本地目录中 import requests from lxml import etree import json import os from urllib import request# 设置Bing搜索URL和请求头 url https://cn.bing.com/images/search?q%E4%B8%80%E4%BA%BA%E4%B9%8B%E4%B8%8B%E5%9B%B…

BUUCTF AWD-Test1

打开靶场是这个有些简陋的界面。 随便点点&#xff0c;找到这个东西。 看到ThinkPHP&#xff0c;思路瞬间清晰&#xff0c;老熟人了。这个就是ThinkPHP漏洞。根据版本我们去找一下poc。 /index.php/?sIndex/\think\View/display&content%22%3C?%3E%3C?php%20phpinfo();…

通过多进程并发方式(fork)实现服务器

以下内容为视频学习记录。 1、父进程accept后返回的文件描述符为cfd以及用于创建连接的lfd; 调用fork()创建子进程后&#xff0c;子进程继承cfd,lfd&#xff0c;通过该cfd与连接过来的客户端通信,lfd对子进程来说没用&#xff0c;可以直接close(lfd); 对于父进程来说&#x…

Presto简介、部署、原理和使用介绍

Presto简介、部署、原理和使用介绍 1. Presto简介 1-1. Presto概念 ​ Presto是由Facebook开发的一款开源的分布式SQL查询引擎&#xff0c;最初于2012年发布&#xff0c;并在2013年成为Apache项目的一部分&#xff1b;Presto 作为现在在企业中流行使用的即席查询框架&#x…

用flymsg代替飞鸽传书(ipmsg、IPMessenger、聊天、文件传输)

用flymsg代替飞鸽传书(ipmsg、IPMessenger、聊天、文件传输) 一&#xff0e;简介 flymsg是由国人所开发的免费软件&#xff0c;是一款局域网内即时通信软件&#xff0c;基于TCP/IP&#xff08;UDP&#xff09;,可运行于多种操作平台&#xff08;Win,Mac,UNIX,Java&#xff09…

统计业务流量的毫秒级峰值 - 华为机试真题题解

考试平台&#xff1a; 时习知 分值&#xff1a; 200分&#xff08;第二题&#xff09; 考试时间&#xff1a; 两小时&#xff08;共3题&#xff09; 题目描述 业务模块往外发送报文时&#xff0c;有时会出现网卡队列满而丢包问题&#xff0c;但从常规的秒级流量统计结果看&…

MyBatis 学习(一)之 MyBatis 概述

目录 1 MyBatis 介绍 2 MyBatis 的重要组件 3 MyBatis 执行流程 4 参考文档 1 MyBatis 介绍 MyBatis 是一个半自动化的 ORM &#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;持久层框架&#xff0c;它允许开发者通过 XML 或注解将对象与数据库中…

【python】Python Turtle绘制流星雨动画效果(附源码)

在这篇技术博客中&#xff0c;我们将学习如何使用 Python 的 Turtle 模块绘制一个流星雨的动画效果。通过简单的代码实现&#xff0c;我们可以在画布上展现出流星闪耀的场景&#xff0c;为视觉带来一丝神秘与美感。 一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入…

生产报工异常信息提示器如何精确提醒管理人员

在现代生产环境中&#xff0c;生产报工异常信息的及时提醒对于管理人员来说至关重要。为了精确提醒管理人员并确保生产流程的顺利进行&#xff0c;智能信息接收腕表作为一种先进的工具&#xff0c;结合了多项功能&#xff0c;可以有效地实现生产报工异常信息的精确提醒。以下将…

【vmware安装群晖】

vmware安装群晖 vmware安装群辉&#xff1a; vmware版本&#xff1a;17pro 下载链接&#xff0c; https://customerconnect.vmware.com/cn/downloads/details?downloadGroupWKST-1751-WIN&productId1376&rPId116859 激活码可自行搜索 教程&#xff1a; https://b…

RK3568 Android12 适配抖音 各大APP

RK3568 Android12 适配抖音 各大APP SOC RK3568 system:Android 12 平台要适配抖音和各大APP 平台首先打开抖音发现摄像头预览尺寸不对只存在右上角,我将抖音APP装在手机上预览,发现是全屏 一开始浏览各大博客 给出的解决方法是修改framework 设置为全屏显示: framewo…