@ControllerAdvice响应体始终为null

时间:2017-12-24 00:44:43

标签: java spring spring-mvc

我想将响应的主体设置为异常的错误消息:

@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {

  @ExceptionHandler(value = EntityNotFoundException.class)
  protected ResponseEntity<Object> handleNotFound(EntityNotFoundException ex, WebRequest request) {

    System.out.println(ex.getMessage());
    return handleExceptionInternal(ex, ex.getMessage(), new HttpHeaders(), HttpStatus.I_AM_A_TEAPOT, request);

  }
}

我正在使用restTemplate.getForEntity(uri, String.class)对其进行测试,但我似乎得到的只是418 null响应。

我知道执行进入此处,因为响应是418,我知道该消息不是空的,因为它打印了我想要的值。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

您没有提供有关RestTemplate配置的信息或调用代码的内容,因此我将做出一些假设,如果其中任何一个出错,您可以纠正我。

  1. 您的RestTemplate正在使用DefaultResponseErrorHandler
  2. 您正在使用通用catch(Exception ex)块
  3. 如果这些都是真的那么你的RestTemplate在遇到4XX状态代码时会抛出HttpClientErrorException。您可以找到代码here

    如果您只使用通用catch (Exception ex)块,则无法使用响应正文。您可以通过添加catch(HttpClientErrorException ex)块并从ex.getResponseBodyAsString()

    获取内容来访问响应正文