Я создал небольшой весенний загрузочный проект, чтобы продемонстрировать, что вы можете сделать.
Сначала простой сервис, который выдаст нам ошибку при вызове:
@RestController
public class Endpoint {
@GetMapping("/error")
public ResponseEntity createError() {
ErrorDetails errorDetails = new ErrorDetails("some error message");
return ResponseEntity.status(400).body(errorDetails);;
}
}
Детали ошибок, которые вы хотите извлечь, аналогичны приведенным в этом примере:
@AllArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
public class ErrorDetails {
private String errorMessage;
}
А затем еще одна конечная точка с клиентом, который вызывает отказавший сервис.Возвращает сведения об ошибке:
@RestController
public class ClientDemo {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/show-error")
public String createError() {
try{
return restTemplate.getForEntity("http://localhost:8080/error", String.class).getBody();
} catch(HttpClientErrorException | HttpServerErrorException ex) {
return ex.getResponseBodyAsString();
}
}
}
Для завершения:
@SpringBootApplication
public class StackoverflowApplication {
public static void main(String[] args) {
SpringApplication.run(StackoverflowApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
При переходе к http://localhost:8080/show-error вы видите это:
{
"errorMessage": "some error message"
}