学成在线第一天-课程内容管理服务搭建以及查询课程接口设计

这篇具有很好参考价值的文章主要介绍了学成在线第一天-课程内容管理服务搭建以及查询课程接口设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、搭建课程内容管理服务

二、设计接口

三、面试题

四、总结


一、搭建课程内容管理服务

没什么好说的,直接就是创建内容模块 然后这个继承父模块,然后再课程内容模块下面创建三个子模块,model、sevice、controller 

model依赖base、service依赖model、controller依赖service

二、设计接口

接口设计要考虑接口要考虑两个方面:

1. 接口参数

需要很清晰的知道前端传递过来哪些参数

如果说能用实体类接收就直接用实体类接收,如果说接收不了,考虑设计dto

这里注意:

如果是多端的情况,controller通常参数个数是不同的,但实际上调用的service都是同一个方法

比如说 app端的controller接口参数只有两个参数,而网页端的controller有三个参数

当然这里其实可以只写一个controller,都用来处理这些请求,只需要将参数设置为那个最多的参数就行了,但是这里的话,如果生成文档交由前端看,就会存在迷惑性,因为我实际上并不需要传递那么多的参数,但是还显示那么多的参数,前端就以为都要传递,所以可以设计成不同的controller

如果是多个controller那么参数就可以叫vo   如果一个参数就叫dto 而service层的话就用最多个数参数接收就行了

2. 响应结果

这个的话,要看前端到底需要什么

简单点的话直接看接口文档,然后自己封装vo对象就行了

如果没有接口文档,就需要我们自己考虑页面需要哪些数据,我们就返回什么数据...接收参数也是一样的

总结:

其实分析一个接口的设计:就是分析参数和响应对象

我们做项目的时候,需要明确需求,确定好参数和响应结果所需要的哪些属性,然后设计dto类和vo类,然后再到service中根据参数获取到结果 返回即可

接口设计当然除了参数还有响应结果,另外的请求路径,以及请求方式需要注意

一般来说其实还是get和post用的多,当参数很多很复杂的时候,就用post请求就行了,传递json给接口

再实际项目中 po、mapper、service都使用插件直接生成 搭建这个MP环境其实很简单的

分析一下分页查询课程列表接口的设计思路:

首先需要分页参数,分页参数较少,前端可以在路径上面直接传递过来  后端就是用一个分页参数类接收就行了

而那个内容条件的可能参数较多,也直接使用对象接收,前端在url上面传递不现实的,所以前端应该传递一个json字符串,后端使用@RequestBody接收

@ApiOperation(value = "课程列表", notes = "课程列表")
    @PostMapping("/list")
    public PageResult<CourseBase> courses(PageParams pageParams, @RequestBody CourseBaseInfoDto courseBaseInfoDto) {
        PageResult<CourseBase> pageResult = courseBaseService.courses(pageParams, courseBaseInfoDto);
        return pageResult;
    }

这里的话如果是分页请求,那么也就是分页结果,可以使用一个分页响应类返回。分页响应类里面封装着 结果 总记录数 响应状态码 响应信息:

public class PageResult<T> {
    private static final long serialVersionUID = 1L;

    /** 总记录数 */
    @ApiModelProperty(value = "总记录数")
    private long counts;

    /** 列表数据 */
    @ApiModelProperty(value = "列表数据")
    private List<T> items;

    /** 消息状态码 */
    @ApiModelProperty(value = "消息状态码")
    private int code;

    /** 消息内容 */
    @ApiModelProperty(value = "消息内容")
    private String msg;


    private long page;

    //每页记录数
    private long pageSize;

    /**
     * 表格数据对象
     */
    public PageResult()
    {
    }

    /**
     * 分页
     *
     * @param list 列表数据
     * @param counts 总记录数
     */
    public PageResult(List<T> list, long counts)
    {
        this.items = list;
        this.counts = counts;
    }


    public PageResult(List<T> list, long counts,Integer code,String msg)
    {
        this.items = list;
        this.counts = counts;
        this.code = code;
        this.msg = msg;
    }


    public static <T> PageResult<T> ok(List<T> list, long counts){
        PageResult<T> pageResult = new PageResult<>(list, counts,200,"success");
        return pageResult;
    }

    public static <T> PageResult<T> error(){
        PageResult<T> pageResult = new PageResult<>(null,0,500,"error");
        return pageResult;
    }


    public long getcounts()
    {
        return counts;
    }

    public void setcounts(long counts)
    {
        this.counts = counts;
    }

    public List<T> getitems()
    {
        return items;
    }

    public void setitems(List<T> items)
    {
        this.items = items;
    }

    public int getCode()
    {
        return code;
    }

    public void setCode(int code)
    {
        this.code = code;
    }

    public String getMsg()
    {
        return msg;
    }

    public void setMsg(String msg)
    {
        this.msg = msg;
    }
}

大致这样,具体属性名参考前端写的 匹配好 

而一般的请求就使用一般结果响应类 推荐使用下面这个:

public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;

	public R setData(Object data) {
		put("data",data);
		return this;
	}

	//利用fastjson进行反序列化
	public <T> T getData(TypeReference<T> typeReference) {
		Object data = get("data");	//默认是map
		String jsonString = JSON.toJSONString(data);
		T t = JSON.parseObject(jsonString, typeReference);
		return t;
	}

	//利用fastjson进行反序列化
	public <T> T getData(String key,TypeReference<T> typeReference) {
		Object data = get(key);	//默认是map
		String jsonString = JSON.toJSONString(data);
		T t = JSON.parseObject(jsonString, typeReference);
		return t;
	}

	public R() {
		put("code", 0);
		put("msg", "success");
	}
	
	public static R error() {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}

	public Integer getCode() {

		return (Integer) this.get("code");
	}

}

三、面试题

SpringBoot中接口参数相关的注解有哪些?

1. 类上面的

@RequestMapping 指定路径 一般来说是用  操作哪个表 对那个表进行crud那么就是什么路径

比如说内容 课程控制器  就是  content/course 第一个是微服务 第二个是表

@ResponseBody 这个可以将控制器中所有的接口都以json返回

@Controller

@RestController 上面两个结合就是这个注解

还可以添加swagger注解:

@Api 解释控制器到底干嘛的

2. 方法上面的

@RequestMapping

如果明确请求方式可以使用

@GetMapping  Post Put Delelt 

@ResponseBody

另外还可以添加swagger注解

@ApiOperation 解释接口干嘛的

3. 方法参数上面的

@RequestParam 接收表单提交的数据
@RequestBody 接收json数据

@PathVariable 接收路径变量

swagger注解:

@ApiImplicitParam 解释参数信息 @ApiImplicitParams里面可以定义多个@ApiImplicitParam可以同时声明多个参数信息

@ApiImplicitParams({
            @ApiImplicitParam(name = "pageNum", value = "页码数", required = true),
            @ApiImplicitParam(name = "pageSize", value = "一页显示的文章条数", required = true),
            @ApiImplicitParam(name = "categoryId", value = "文章类别Id", required = true)
    }

四、总结

1. 掌握接口设计方法

2. 掌握微服务模块搭建方法

3. 知道SpingBoot中接口相关的注解有哪些文章来源地址https://www.toymoban.com/news/detail-721182.html

到了这里,关于学成在线第一天-课程内容管理服务搭建以及查询课程接口设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务实战项目-学成在线-媒资管理模块(有项目实战实现)

    1.1 模块介绍 媒资管理系统是每个在线教育平台所必须具备的,查阅百度百科对它的定义如下: 媒体资源管理(Media Asset Management,MAM)系统是建立在多媒体、网络、数据库和数字存储等先进技术基础上的一个对各种媒体及内容(如视/音频资料、文本文件、图表等)进行数字化存储

    2024年02月11日
    浏览(45)
  • 后台管理系统(第一天)

    1、后台管理系统项目简介 什么是后台管理系统项目? 在前端领域当中,开发后台管理系统项目,并非是Java,PHP等后台语言项目在前面课程当中,我们已经开发了一个项目【尚品汇电商平台项目】,这个项目主要针对的是用户(游客),可以让用户在平台当中购买产品。 但

    2024年02月05日
    浏览(72)
  • web自动化之基础内容(全网最详细,selenium环境准备和selenium工具操作)-第一天

    (1)pycharm中要安装selenium 也可用pip指令安装pip install selenium (2)安装chromedriver 根据你自己的chrome的版本,下载对应的chromedriver chrome版本在114前,下载的链接 http://chromedriver.storage.googleapis.com/index.html chrome版本超过114,下载的链接 Chrome for Testing availability 本人的chrome版本为

    2024年02月04日
    浏览(32)
  • 交通管理|交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

    交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现  一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图  五、核心代码  六、论文参考 七、最新计算机

    2024年02月19日
    浏览(33)
  • 交通管理在线服务系统|基于Springboot的交通管理系统设计与实现(源码+数据库+文档)

    交通管理在线服务系统目录 目录 基于Springboot的交通管理系统设计与实现  一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、驾驶证业务管理 3、机动车业务管理 4、机动车业务类型管理 四、数据库设计 1、实体ER图  五、核心代码  六、论文参考 七、最新计算机

    2024年04月28日
    浏览(27)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程练习(物联技术666)

    点赞+关注,功德无量。更多配套资料,欢迎私信。 网盘链接:https://pan.baidu.com/s/1NIrDmbm8EtFkB1G8s7E3Sg?pwd=qsoh 提取码:qsoh 1、建立一个服务器和一个客户端,二个之间通信 //--------------------服务器 #include stdio.h #include stdlib.h #include string.h                                    

    2024年02月01日
    浏览(38)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第一天-C++概述和基础(物联技术666)

    网盘链接:https://pan.baidu.com/s/1TKdHdeuDI8XPaakepvSLZQ?pwd=1688  提取码:1688 上午:C++概述     下午:C++基础 教学内容: 1 、面向对象: 程序=(对象+对象+…) 对象=(算法+数据结构) 2、类与对象: 对象是现实世界中的一个实体,其特征是: • 每一个对象必须有一个名字以区

    2024年02月01日
    浏览(35)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第一天-ARM常见问题1-100问(物联技术666)

    链接:https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd=1688 提取码:1688 第1问:                         Q:请问在初始化CPU堆栈的时候一开始在执行mov r0, LR这句指令时处理器是什么模式                         A:复位后的模式,即管理模式.                   

    2024年01月24日
    浏览(41)
  • 学成在线----day5

    当前要开发的是媒资管理服务,目前为止共三个微服务:内容管理、系统管理、媒资管理,如下图: 后期还会添加更多的微服务,当前这种由前端直接请求微服务的方式存在弊端: 如果在前端对每个请求地址都配置绝对路径,非常不利于系统维护,比如下边代码中请求系统

    2024年02月08日
    浏览(45)
  • 前端学成在线

    网站根目录是指存放网站的 第一层 文件夹,内部包含当前网站的 所有素材 ,包含 HTML、CSS、图片、JavaScript等等。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uXIiqznv-1691944062625)(assets/1680336645218.png)] 首页引入CSS文件 [外链图片转存失败,源站可能

    2024年02月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包