requestmapping 参数没设置好 导致返回的protobuf解析报错

博客讲述了在使用protobuf进行前后端数据交互时遇到的错误,问题源于@RequestMapping未指定返回数据类型。通过前端提示返回数据为字符串而非二进制,修正为指定返回类型后问题解决。同时讨论了Spring MVC中HttpMessageConverter的作用及其在内容处理过程中的工作原理。
摘要由CSDN通过智能技术生成

背景:使用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

当使用`@RequestMapping`注解来处理请求时,通常会将方法的返回值作为响应返回给客户端。如果返回的是字符串,那么默认情况下,Spring会尝试将该字符串解析为视图名称,并根据视图名称去寻找对应的视图模板进行渲染。 如果你在使用`@RequestMapping`注解时返回字符串报错,可能有以下几个原因: 1. 缺少视图解析器:在Spring MVC中,需要配置视图解析器来解析视图名称。你可以在Spring配置文件中添加如下配置来配置视图解析器: ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 上述配置将会将视图名称解析为`/WEB-INF/views/`目录下的以`.jsp`结尾的文件。 2. 返回的字符串有对应的视图模板:如果返回的字符串有对应的视图模板,那么就会报错。请确保你的项目中存在对应的视图模板文件。 3. 返回的字符串有被正确处理:如果你希望返回的字符串直接作为响应内容返回给客户端,而不是作为视图名称进行解析,可以使用`@ResponseBody`注解来标记方法。例如: ```java @RequestMapping("/example") @ResponseBody public String example() { return "Hello, World!"; } ``` 这样返回的字符串就会直接作为响应内容返回给客户端。 希望以上解答对你有帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值