制作网页和网站的区别,徐汇集团网站建设,二手网站建设的策划,网站导航栏下拉框怎么做目录 一、搭建课程内容管理服务
二、设计接口
三、面试题
四、总结 一、搭建课程内容管理服务
没什么好说的#xff0c;直接就是创建内容模块 然后这个继承父模块#xff0c;然后再课程内容模块下面创建三个子模块#xff0c;model、sevice、controller
model依赖base…目录 一、搭建课程内容管理服务
二、设计接口
三、面试题
四、总结 一、搭建课程内容管理服务
没什么好说的直接就是创建内容模块 然后这个继承父模块然后再课程内容模块下面创建三个子模块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 PageResultCourseBase courses(PageParams pageParams, RequestBody CourseBaseInfoDto courseBaseInfoDto) {PageResultCourseBase pageResult courseBaseService.courses(pageParams, courseBaseInfoDto);return pageResult;}
这里的话如果是分页请求那么也就是分页结果可以使用一个分页响应类返回。分页响应类里面封装着 结果 总记录数 响应状态码 响应信息
public class PageResultT {private static final long serialVersionUID 1L;/** 总记录数 */ApiModelProperty(value 总记录数)private long counts;/** 列表数据 */ApiModelProperty(value 列表数据)private ListT 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(ListT list, long counts){this.items list;this.counts counts;}public PageResult(ListT list, long counts,Integer code,String msg){this.items list;this.counts counts;this.code code;this.msg msg;}public static T PageResultT ok(ListT list, long counts){PageResultT pageResult new PageResult(list, counts,200,success);return pageResult;}public static T PageResultT error(){PageResultT pageResult new PageResult(null,0,500,error);return pageResult;}public long getcounts(){return counts;}public void setcounts(long counts){this.counts counts;}public ListT getitems(){return items;}public void setitems(ListT 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 HashMapString, Object {private static final long serialVersionUID 1L;public R setData(Object data) {put(data,data);return this;}//利用fastjson进行反序列化public T T getData(TypeReferenceT 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,TypeReferenceT 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(MapString, 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中接口相关的注解有哪些