Как создать уникальный идентификатор для запроса REST API в Spring-boot? - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно, чтобы мои журналы (движок log4j) были более информативными с уникальным идентификатором для запроса на мой REST API в приложении Spring-Boot.

Я хочу избегать использования суперкласса, получившего поле requestIdи простираюсь от него.

Я пытался найти хороший пример в Интернете, но это было не так ясно.

Есть ли лучший метод, который я могу использовать?

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Существует несколько лучших практик, используемых следующим образом:

  1. Использовать AOP. См .: AOP используется для уровня контроллера
  2. Использовать MDC
  3. Использование MDC с AOP MDC с AOP
0 голосов
/ 28 мая 2019

Использование поля для такой функции на первый взгляд может вызвать проблемы во время интеграционного тестирования.

В идеале, просто следуйте принципу SRP и включите логику генерации в выделенный класс, который вы можете сделать инъекционным @Component .. MyIdGenerator и т. Д.

Там вы можете использовать синхронизированный метод generateId().

Теперь вы можете использовать его в любом контроллере, в котором он необходим, а также вы можете легче настроить интеграционный тест и лучше контролировать его.

Обновление:

Вы также можете воспользоваться HandleInterceptorAdapter, если это будет глобальная стратегия:

@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {

    /* generate unique id here and log what is needed */

    }

Вы можете инкапсулировать генерацию и запись идентификатора внутри этого класса.

...