由于后端的返回数据采用统一的数据结构,所以不管是SpringBoot还是SpringMVC,都运用了ResponseBodyAdvice类以及@ControllerAdvice注解来辅助。
项目中有一个接口是来接收公众号推事件的。最近不知道怎么的,一直出现报警,提示我没有响应内容给微信。
@POSTMapping("xxx")
public void xxx(HttpServletResponse response){
}
虽然我返回的是void ,但是我底层有做返回统一数据的封装,平时项目也在使用,肯定都会返回一个基本数据的骨架。究竟是因为什么导致代码没有经过 ResponseBodyAdvice类,从而以统一格式输出到前端?思前想后,猜测有没有可能是因为方法注入了HttpServletResponse,然后MVC觉得你可能要自己要做一些特殊的处理,所以他就
没有在执行标准的RequestHandler。
测试了三种结果:
-
没有注入HttpServletResponse
返回自定义的统一数据结构。
-
注入HttpServletResponse,没有返回值
没有返回任何响应数据。
-
注入HttpServletResponse,有返回值
返回自定义的统一数据结构。
这也验证了刚才我的猜想是对的。所以如果当你注入了HttpServletResponse,前端又发现接口请求成功,但是没有数据响应的时候,请注意是否是第二种情况。第二种情况比较适合于那种支付回调的一些业务,对页面输出一些对方要求的格式内容,如XML等等。