我有 @RestController :
@PostMapping
public ResponseEntity doSmth(@RequestBody String json){
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
RestTemplate restTemplate = new RestTemplate();
String url = "...";
HttpEntity<String> requestEntity = new HttpEntity<>("body", headers);
restTemplate.postForLocation(url, requestEntity);
....
}
我正在呼叫的 应用程序 以下列方式工作:
1.返回 responseEntity 。
2.如果出现问题,它会 抛出异常 。
当它引发异常时,要感谢 异常处理程序 。它提供json作为有关问题信息的答案。
例如, SomeException 的异常处理程序:
@RestController
@ControllerAdvice
public class SomeExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(SomeException.class)
public final ResponseEntity<ErrorDetails> handleUserNotFoundException(SomeException ex, WebRequest request) {
final HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
ErrorDetails errorDetails = new ErrorDetails(new Date(), status.value(), status.getReasonPhrase(), ex.getMessage(),
request.getDescription(false));
return new ResponseEntity<>(errorDetails, status);
ErrorDetails -仅POJO。需要为客户提供有关异常的信息。
当我使用restTemplate调用的应用程序引发异常时,
我收到 HttpServerError错误 。
System.out.println(error); //org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 null
问题 :
我需要知道哪个异常抛出在另一台服务器上或与哪个消息一起,但是对于任何消息中的任何异常,它都会给出这样的答案。
更新:
邮递员到服务器:
1. @PostMapping
方法返回带有空主体和ResponseEntity
标头的location
(创建操作),因此客户端收到201状态码CREATED
和位置。
2.如果出现问题,客户将收到json
代表的ErrorDetails
。
服务器到服务器:
1. ResponseEntity responseEntity = restTemplate.postForObject(url,requestEntity, ResponseEntity.class);
可行,但即使我尝试使用responseEntity.getHeaders()
-它也不包含localtion
。
2.服务器向其处理程序抛出SomeException extends RuntimeException
时-取决于状态码,我有一些异常(HttpServerError for 5xx
)。
当我使用postForUrl
时,我会收到location
,但例外情况是相同的。