У меня есть два @RestController
s - (A и B) и зарегистрировано ResponseEntityExceptionHandler
.Можно ли (и как это сделать) позвонить с A
и получить ответ от B
после применения обработчика исключений?
Пример:
- Пользовательский отдыхвызов
A
A
вызов B
с getPerson
B
сгенерирует исключение NotFound
NotFound
обрабатывается обработчиком исключений, преобразуя ResponseEntity
и поставив 400 статус B
наконец вернет исключение ResponseEntity
A
получает 400 статус из B
A
банкаполучите это 400 и сделайте что-нибудь с ним
Простой @Autowired
не работает.
Фрагмент:
A:
@RestController
@RequestMapping("/v1")
public class A {
private final B b;
@Autowired
public A(B b) {
this.b = b;
}
@PostMapping(
value = "persons",
consumes = "application/json",
produces = "application/json")
public ResponseEntity<List<StatusResponse<Person>>> addPersons(final List<Person> persons) {
final List<StatusResponse<Person>> multiResponse = new ArrayList<>();
for(final Person p: persons) {
final ResponseEntity<Person> response = b.addPerson(person);
multiResponse.add(new StatusResponse<>(
response.getStatusCode(), response.getMessage(), response.getBody()
));
}
return ResponseEntity.status(HttpStatus.MULTI_STATUS).body(multiResponse);
}
}
B:
@RestController
@RequestMapping("/v1")
public class B {
@PostMapping(
value = "person",
consumes = "application/json",
produces = "application/json")
public ResponseEntity<Person> addPerson(final Person person) {
accessService.checkAccess();
return ResponseEntity.status(201).body(
logicService.addPerson(person)
);
}
}
Обработчик
@ControllerAdvice
public final class MyExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(MyException.class)
protected ResponseEntity<Object> handleApiException(final MyException exception, final WebRequest webRequest) {
//logic
return afterLogic;
}
}