今天需要写一个第三方请求的过滤器,即前端请求后台,后台使用restTemplate请求三方接口,然后封装响应头和响应体返回给前端。
可是,当写完代码,在前端请求后一看
响应信息显示不全,这直接让我想到了在后端封装中设置了Content-Length这个响应头,于是看代码
貌似一点问题都没有啊!再看前端接收到的响应头
24个字符?看看实际响应结果是多少字符呢?
嗯?按理说向后台要24个字符,肯定能把16个字符都取出来啊。再看后台,打断点调试
发现结果字符串是一个长度为48的数组,这时猛然想起上学时C++老师说过读写文件可以使用字符流或字节流,没错,那Content-Length一定要设置字节数组的长度了(推测HTTP传输是按字节流),而java的String.length()默认是返回字符数组的字符数,怎么才能获取其字节流长度呢?
完美解决
不过有一点,为什么getBytes()得到的是32,而debug界面显示的是48,猜测debug显示的不是字符串的字节流数组,而是字符串这个类的一些基本信息。