Однако я столкнулся с трудностями при доступе к bean-компоненту Tracer области запроса в моем обработчике исключений.
Я пробовал как аннотацию @ExceptionHhandler контроллера отдыха в контроллере REST, так и @ControllerAdvice, но нет никаких возможностей для поддержки доступа к компоненту области действия.
Вот моя настройка:
Код: Выделить всё
@RestController
public class MyController {
@Bean
@RequestScope
Tracer tracer(){
return new Tracer();
}
@GetMapping(path = "list")
public String list(Tracer trace){
return trace.getCorrelationId();
}
@GetMapping(path = "throw")
public String throwEx(Tracer trace,HttpServletRequest req){
throw new RuntimeException("Ops");
}
@ExceptionHandler({Exception.class})
ResponseEntity defaultExceptionHandler(Tracer tracer, HttpServletRequest req, Exception ex) {
return ResponseEntity
.internalServerError()
.body("ERROR: " + tracer.getCorrelationId());
}
}
Код: Выделить всё
@Getter
public class Tracer {
private final String requestId;
private final String correlationId;
public Tracer() {
requestId = null;
correlationId = UUID.randomUUID().toString();
}
public Tracer(String requestId, String correlationId) {
this.requestId = requestId;
this.correlationId = correlationId;
}
}
Код: Выделить всё
@SpringBootTest
@AutoConfigureMockMvc
class MyControllerTest {
@Autowired
protected MockMvc mockMvc;
@Test
void testExceptionHandler() throws Exception {
mockMvc
.perform(MockMvcRequestBuilders.get("/throw")
)
.andDo(MockMvcResultHandlers.print())
.andReturn()
.getResponse()
.getContentAsString();
}
}
Не удалось разрешить параметр [0] в org.springframework.http.ResponseEntity com.baeldung.scopes.MyController.defaultExceptionHandler(com.baeldung.scopes.Tracer,jakarta.servlet.http.HttpServletRequest,java.lang.Exception): нет подходящего преобразователя
Похоже, что я не могу напрямую внедрить компонент Tracer в метод обработчика исключений.
Я что-то упустил?
Есть ли другой подход к решению этой проблемы?
Будем очень признательны за любую помощь или предложения!
Подробнее здесь: https://stackoverflow.com/questions/786 ... on-handler