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

本文主要是介绍学成在线第一天-课程内容管理服务搭建以及查询课程接口设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

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

二、设计接口

三、面试题

四、总结


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

没什么好说的,直接就是创建内容模块 然后这个继承父模块,然后再课程内容模块下面创建三个子模块,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");	//默认是mapString 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);	//默认是mapString 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中接口相关的注解有哪些

这篇关于学成在线第一天-课程内容管理服务搭建以及查询课程接口设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259644

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联