携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
播放音乐模块设计
请求响应设计
请求:
{
get
/music/get?path=xxx.mp3
}
响应:
{
data:音乐数据本身的字节信息
}
可以看到我们这里请求的设计采用的是
get方法,通过/music/get?path=xxx.mp3获取到响应的音乐信息,这也就和我们之前设计的保存音乐的url匹配上了!而我们响应只要将对应的音乐字节信息返回给浏览器即可!
代码实现
//播放音乐
@RequestMapping("/get")
public ResponseEntity<byte[]> get(String path){
//我们要先获取到该音乐保存在服务器下的路径信息!
try {
byte[] fileByte = null;
//获取到文件对象
File file = new File(SAVE_PATH +File.separator+ path);
//获取到该文件对象的路径信息
Path filepath = file.toPath();
//读取文件中的所有字节
fileByte = Files.readAllBytes(filepath);
return ResponseEntity.ok(fileByte);
}catch (IOException e){
e.printStackTrace();
}
return ResponseEntity.badRequest().build();
}
方法讲解
-
Files.readAllBytes(Path path);读取文件中的所有字节,参数是
Path路径值! -
File.separator与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串!
就是在
Windows系统下是``,而在Linux下是/ -
ReponseEntity这是
Spring对请求响应的分装,继承了HttpEntity对象,包含Http响应码(HttpStatus),响应头(header),响应体(body)3部分!ResponseEntity类继承自HttpEntity类,被用于Controller层方法 !我们可以通过这个类下面提供的静态方法,封装一下响应返回给浏览器!
ok静态方法://这个方法若被调用的话,返回OK状态 public static ResponseEntity.BodyBuilder ok(){ return status(HttpStatus.OK); } //这个方法若被调用的话,返回body内容和OK状态 public static <T> ResponseEntity<T> ok(T body) { ResponseEntity.BodyBuilder builder = ok(); //ResponseEntity可以通过这个builder返回任意类型的body内容 return builder.body(body); }我们代码里的
ResponseEntity.ok(fileByte);就是将ok状态和fileByte音乐文件信息以body的形式返回给前端!
验证结果
音乐文件有TAG标志

假如我们拿到的并不是mp3文件!
这里的隆里电丝.mp3我是通过png文件改成了这个,显然找不到这个音乐标志!