@Override
    public ExecuteContext before(ExecuteContext context) {
        if (context.getArguments()[0] instanceof ServerWebExchange) {
            ServerHttpRequest request = getExchangeAfterPutHeaders(context).getRequest();
            String path = request.getURI().getPath();
            ThreadLocalUtils.setRequestData(new RequestData(request.getHeaders(), path, request.getMethod().name()));
        }
        return context;
    }
@Test
    public void testBefore() {
        // When RequestTag is null
        interceptor.before(context);
        RequestData requestData = ThreadLocalUtils.getRequestData();
        Assert.assertEquals(HttpMethod.GET.name(), requestData.getHttpMethod());
        Assert.assertEquals("", requestData.getPath());
        Assert.assertNotNull(requestData);
        Map<String, List<String>> headerData = requestData.getTag();
        Assert.assertEquals(2, headerData.size());
        Assert.assertEquals("bar1", headerData.get("bar").get(0));
        Assert.assertEquals("foo1", headerData.get("foo").get(0));

        // When RequestTag is not null
        ThreadLocalUtils.addRequestTag(Collections.singletonMap("bar-foo", Collections.singletonList("foo2")));
        interceptor.before(context);
        requestData = ThreadLocalUtils.getRequestData();
        Assert.assertEquals(HttpMethod.GET.name(), requestData.getHttpMethod());
        Assert.assertEquals("", requestData.getPath());
        Assert.assertNotNull(requestData);
        headerData = requestData.getTag();
        Assert.assertEquals(3, headerData.size());
        Assert.assertEquals("bar1", headerData.get("bar").get(0));
        Assert.assertEquals("foo1", headerData.get("foo").get(0));
        Assert.assertEquals("foo2", headerData.get("bar-foo").get(0));
    }