开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-删除课程删除视频(接口)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11418
课程管理-删除课程删除视频(接口)
删除课程删除视频
我们在删除视频的时候有一个特点,删除课程就要把它的章节,小节,描述都删除,所以我们现在添加视频,一个课程中有很多小节,每个小节中又有视频,所以这里的特点就是,我们在删除课程的时候,视频有多个,至少应该是一个,所以我们的效果就是删除课程删除视频,这个我们需要明确。那我们要怎么做呢?
讲解如下:
直接找到删除代码,来到 vod 中,打开 vod ,直接看代码,在代码中我们可以看到我们在上午在 vod 中写过的删除代码,
@DeleteMapping("removeAlyVideo/ {id}")
public R removeAlyVideo(@PathVariable String id){
try{
//初始化对象
DefaultAcsClient client = InitVodCilent. initVodClient(ConstantVodUtils. ACCESS KEY ID
//创建删除视频request对象
DeleteVideoRequest request =new DeleteVideoRequest(:
//向request设置视频id
request.setVideoIds(id);
//调用初始化对象的方法实现删除
client.getAcsResponse(request);
return R. ok();
} catch(Exception e){
e.printStackTrace()
但这个方法做的是跟据你的视频 id 删除你的视频,是删除某一个视频,而我们现在是删除多个视频,所以有多种方式来解决这个问题。第一种方法就是接口可以新写一种接口,可以做一个循环,循环掉这个循环的方法,这样我们就可以做到删除多个视频。
假如我现在有三个视频,那我循环三次,每次都调用这种方法,我那么多个视频是可以删除的,这样做是可以的,但是我们为了更区分一下,让大家有一个更深入的印象,因此重新写了一个方法,专门做一个删除多个视频的方法,注意我写的目的,在实际的开发中,如果不写,使用这个方法循环删除,是没有问题的,再写一个方法进行删除多个视频也是可以的,使用哪种取决于自己,只是我提供更多的一种方式。
1、 在 service-vod 创建接口,删除多个视频
在 vod 中的 control 中写一个方法。
//删除多个阿里云视频的方法
//参数是多个视频 id,
@DeleteMapping("delete-batch")
public R deleteBatch(@RequestParam (“videoidlist”)list videoidlist){
在课件中找到并填写删除多个视频的方法;
return R. ok():
因为我们现在要删除多个视频,如果删除一个视频,只需要传入一个视频 id;要删除多个视频就要传入多个 id,在 setVideoids(id);中就可以传入多个视频 id,之间用逗号隔开,所以我们现在就需要传入多个视频id。
有一种最简单的一种方式,这些String中只能传入一个值,所以我们加个string数组就可以添加多个值,但一般情况下更建议用 list 来传入,在这个集合中能放入多个数据,所以我们现在使用 list 来传递多个值,所以代码中填写上 list videoidlist,就是我们的参数,但是我们为了更明显,我们可以加上一个注解,(@RequestParam,并加上参数名称,所以我们就参数传过来了。
删除的写法和以下写法应该是一样的,
try
//初始化对象
DefaultAcsClient client = InitVodCilent. initVodClient(ConstantVodUtils. ACCESS KEY ID.
//创建删除视频request对象
DeleteVideoRequest request =new DeleteVideoRequest();
//video list值转换成1,2,3,
//向request设置视频id
//1,2,3
id request.setVideoIds(id);
//调用初始化对象的方法实现删除
client.getAcsResponse(request):
return R.ok();
}catch(Exception e) {
e.printStackTrace();
throw new GuliException(20001,"删除视频失败”):
没有区别,所以我们为了更加明显,将以上代码写入 service 中,专门写他的方法,
//删除多个阿里云视频的方法
//参数多个视频 id List videoIdlist
@DeleteMapping("delete-batch")
public R deleteBatch(@RequestParam("videoIdList") List videoIdList) {
vodService. removeMoreAlyVideo(videoIdList);
return R.ok();
写完之后,我们开始写 service,先创建删除多个视频,之后写 service 对应的实现类,在实现类中实现方法,按照我们最开始的方法,直接复制粘贴。
我们可以看到,第一步应该初始化对象,第二步创建删除视频 request 对象,第三步向里面 id request.setVideoIds(id);
设置 id 值,第四步实现调用结果,最后判断说出删除视频失败,
区别就是刚才里面就开始传 id,而我们现在的参数是一个 list 集合,该如何做到,如果说我们一个视频就传一个 id,那多个视频就要传多个 id,所以他们之间需要用逗号隔开,这样的话他们就可以传进来了,如果纸船入个 list 集合,他肯定不认识,它只识别传入的字符串,当多个视频id用逗号隔开,这才是我们的做法,就是将 video list 值转换成1,2,3,
//video list 值转换成1,2,3,
它里面放了多个视频 id,如1,2,3等,所以我们现在第一个做法就是将这个集合做个便利,得到每个值,然后将每个值用逗号做个拼接,传入就可以了,这种方法是没有问题的,但我们还有更简单的方法。
我们可以使用 stringutils,里面有一种 join 的方法,他有加入的意思,而他在这里就表示把我们的数据按照一定的符号进行分割,将我们的 list 集合按照逗号进行分割,这就是 join 方法,所以接下来我们就让 join 发挥功能,为了更加明显,先写一个测试方法,给方法进行测试,测试成功之后再改到这里,
public static void main(String[] args) {
List list =new ArrayList<>();
list.add("11");
list.add("22");
list.add("33");
// 11,22,33
StringUtils . join(list.toArray(),separator:",")
System. out. println(join)
这里要使用 commons.lang.StringUtils. 中的方法,这和我们之前做的是有区别的,传入参数,使用list参数,加上逗号,所以分隔开来,最后还有一个返回值,就是 string,将返回值输出,System. out. println(join)。
注意的是,这里的 stringutils 不是我们之前使用过的,而是一个工具类,而是commons.lang.StringUtils.,,是用这个方法做到的,
这里的 StringUtils 并不是我们之前使用的包中 spring ,而我们使用的是commons.lang.StringUtils.,
包中的 StringUtils,是 apache.commons.lang.StringUtils.,要注意我们使用的是它。
测试完成之后,我们来看一下结果,我们想要的结果就是多个值之间用逗号隔开,启动看结果,直接执行,我们可以看到值都是被逗号隔开的,这就是我们想要的结果,这样我们就完成了。
我们将它完善
//videoIdlist 值转换成1,2,3
String videoIds = StringUtils. join(videoIdList.toArray(), separator: ",");返回之后,ids 直接传入到我们的 request 中,最后他就可以删除多个视频,所以这个代码我们就完成了。
我们先用 list 传递我们的多个视频,然后再 service 中写到删除方法,将list中的值变成多个逗号隔开的效果,调用方法实现删除的功能,
我们主要关于接口的代码就完成了,记住 join 方法。
然后我们在 edu 中做过调用,要实现删除课程删除视频,接口完成,进行调用,
2、在service-edu 调用 service-vod 接口实观剧除多个视频的功能
新建一个 interface ,里面输入名字和方法,调用就能实现。
@FeignClient("service-vod”) //调用的服务名称
@Component
public interface VodClient {
//定义调用的方法路径
//根据视频id删除阿里云视频
//@PathVariable注解一定要指定参数名称,否则出错
@DeleteMapping("/eduvod/video/removeAlyVideo/ {id}")
public R removeAlyVideo(@PathVariable("id") String id):