背景:使用protobuf2做与前端的数据交互,自己用junit测试的时候没问题,但是前端人员访问接口,总是报错:
com.google.protobuf.InvalidProtocolBufferException: Protocol message end-group tag did not match expected tag.
刚开始以为是protobuf jar包版本不一致导致的问题,后来自己用不同版本的protobuf访问接口也没问题。找啊找都没找到问题出在哪儿,后来前端的同学说正常应该返回二进制数据,但是我们返回的是个string,根据这个点找到了问题。
结果就是:接口没指定返回的数据类型,
RequestMapping("api/getC")改成 @RequestMapping(value = "api/getC", produces = "application/x-protobuf").
问题解决后,回去看为什么自己写的junitTest没问题,然后发现有指定accept,如图153行代码:
,当我删掉produces配置再把153行删掉,果然报错了。
后记1:
produces :指定返回值类型,还设定返回值的字符编码;对应header里面的Accept;
consumes:指定处理请求的提交内容类型;对应header里面的Content-Typ