Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ControllerAdvice响应主体始终为空_Java_Spring_Spring Mvc - Fatal编程技术网

Java @ControllerAdvice响应主体始终为空

Java @ControllerAdvice响应主体始终为空,java,spring,spring-mvc,Java,Spring,Spring Mvc,我想将响应主体设置为异常的错误消息: @ControllerAdvice public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { @ExceptionHandler(value = EntityNotFoundException.class) protected ResponseEntity<Object> handleNotFound(EntityNo

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

@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);

  }
}
@ControllerAdvice
公共类RestResponseEntityExceptionHandler扩展ResponseEntityExceptionHandler{
@ExceptionHandler(值=EntityNotFoundException.class)
受保护的ResponseEntity handleNotFound(EntityNotFoundException ex,WebRequest请求){
System.out.println(例如getMessage());
返回handleExceptionInternal(例如,例如getMessage()、new HttpHeaders()、HttpStatus.I_AM_A_茶壶、请求);
}
}
我正在用
restemplate.getForEntity(uri,String.class)
测试它,但是我似乎只能得到
418null
响应

我知道执行在这里进入,因为响应是
418
,我知道消息不是空的,因为它正在打印我想要的值


感谢任何帮助

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

  • 您的RestTemplate正在使用DefaultResponseErrorHandler
  • 您正在使用一个通用catch(Exception ex)块
  • 如果这些是真的,那么RestTemplate在遇到4XX状态代码时将抛出HttpClientErrorException。你可以找到代码


    如果您仅使用通用的
    catch(Exception ex)
    块,则响应正文将不可用。您可以通过添加一个
    catch(httpclienterrexception ex)
    块并从
    ex.getResponseBodyAsString()获取内容来访问响应正文。谢谢。我捕获了特定的异常,但没有使用getResponseBodyAsString()。有没有办法在RestTemplate配置中隐式处理这些异常,或者每个RestTemplate调用都应该单独尝试/捕获它们?@kaybee99,隐式处理它们是什么意思?你有没有一个你想要达到的目标的例子?