springboot 读取trunk协议内容,以及一些坑

设备录音上传内容到服务器采用的是trunk协议,springboot 后端通过参数接收前端trunk协议内容很简单

下面介绍的是后端读取trunk协议完整内容的 两种方法

1 @RequestBody

例如:

@PostMapping("/xxx")
public String test(@RequestBody byte[] bs, HttpServletRequest request){
	//bs 就是前端上传的trunk协议完整内容
	//...
	return "";
}

2 HttpServletRequest

注:通过读取InputStream 写入byte数组 即可,下面是我读取InputStream 的方法,也可以其他写法

@PostMapping("/xxx")
public String voiceTalkSpeex(@PathVariable("rid") String rid,@RequestBody byte[] bs, HttpServletRequest request){
    byte[] bs = null;
    try {
        InputStream is = request.getInputStream();
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[1024];
        int rc = 0;
        while ((rc = is.read(buff, 0, 1024)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        bs = swapStream.toByteArray();
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return "";
}

实际开发中遇到的坑

上面获取trunk协议数据在正常情况是没问题的,但是如果项目中用到拦截器读取了post请求body内容就会导致后面的Controller方法中参数读取不到body内容,因为inputStream的内容读了一次就没了。
通过 自定义Filter 和 HttpServletRequestWrapper 实现拦截器读取body 且在controller方法中也能读取到body内容 。注意,如果遇到了在controller方法中参数读取到的trunk协议内容或其他字节流数据 比实际内容大了接近一倍。那么请看下我这篇博文的最后面介绍
《springboot 解决拦截器读取post请求输入流参数body内容后controller中 @RequestBody 参数无法读取body 内容问题》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值