今天做了一个统一异常处理,做到设置状态码的时候,我测试发现只要在出现自定义异常的拦截的情况下,响应数据前设置了状态码就会导致无法返回数据,然后我客户端Body响应的参数就是一片空白,一个字母都没有。我在打断点的时候清除看到返回结果集的body里有我正常的数据,但我只要不取消设置状态码就会返回一个空的body,取消后才能正常显示我body里的数据。我猜测是我的自定义异常出了问题,因为除了自定义异常其他异常都不会出现这种情况,但不知道怎么改,恳请大佬指点,下面是我的一些代码。
1、异常拦截代码
2、自定义异常代码
3、统一返回结果集代码
你调用了 setStatus
方法后,其实已经是对客户端写入了header,这是一个已经响应了的response。spring不会再做任何处理。
你不应该调用这个setStatus
方法,除非你自己负责写入 body。
你可以使用 ResponseEntity
对象,通过这个对象可以设置状态码,以及body。并且是交给spring处理的。
@ExceptionHandler(Exception.class)
public ResponseEntity<Result> error (Exception exception){
return ResponseEntity
.status(HttpStatus.INTERNAL_SERVER_ERROR) // 设置HTTP状态码
.body(null); // 设置body
}
我找到我这的问题了,虽然使用了 ResponseEntity对象来做还是不行,但我在将枚举类中的状态码传入参数时成功了。
得出的结论是这个状态码设置不能自己打上一个数字,要从枚举类中获取。
虽然不明白为什么,可能是在返回body的时候还会审查这个状态码是否来自枚举类?
…
你的状态码是随便写的啊?http状态码肯定不能随便写。只能是那几个。
好吧,又不行了,我没加上response.setStatus() body才有的数据,但是状态码我重新更改成HttpStatus的状态码也不行
我一直返回的是205,难道说205是不会有body数据的吗,我使用200,400的时候是有body数据的
好吧,这个状态码无返回内容指的就是body。我一直以为返回内容属于data里面的数据,原来body才是。
现在问题解决了。
1 Like