在异常处理中设置了状态码后客户端显示没有任何数据响应

今天做了一个统一异常处理,做到设置状态码的时候,我测试发现只要在出现自定义异常的拦截的情况下,响应数据前设置了状态码就会导致无法返回数据,然后我客户端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数据的 :innocent:

好吧,这个状态码无返回内容指的就是body。我一直以为返回内容属于data里面的数据,原来body才是。

现在问题解决了。

1 Like