Как получить доступ к bean-компоненту с областью запроса в обработчике исключений Spring?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как получить доступ к bean-компоненту с областью запроса в обработчике исключений Spring?

Сообщение Anonymous »

Мне нужно регистрировать информацию трассировки с помощью bean-компонента Tracer, который ограничен областью запроса, как в моем методе REST, так и в обработчике исключений. Компонент Tracer используется в методе REST для регистрации информации трассировки в начале обработки запроса, и я хочу использовать то же сообщение трассировки в обработчике исключений при возникновении исключения.
Однако я столкнулся с трудностями при доступе к 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»