Как передать параметр запроса с помощью фиктивного клиента?

В настоящее время я использую Feign Client для вызова конечной точки для получения почты Outlook. Но параметр запроса неправильно передается в API.

@FeignClient(name = "email", url = "${BASE.URI}")
public interface EmailClient {

    @GetMapping("/mailfolders/Inbox/messages")
    EmailRequestNew getMessages(@RequestHeader HashMap<String, Object> headers,
                                @RequestParam String filter);

Через службу я вызываю этот почтовый клиент, чтобы получать почту и передавать фильтр как ниже, где от и до datetime

String param = "$filter=receivedDateTime ge " + from + " and receivedDateTime lt " + to +
        "&$expand=singleValueExtendedProperties($filter=id+eq+'String+0x0070')";

Но фактический API, который вызывает, не точен предположим, что BASE.URI что-то вроде (10.0.0.120:8080)

https://BASE.URI/mailfolders/Inbox/messages?param=%24filter%3DreceivedDateTime%20ge%202022-11-18T05%3A32%3A56Z%20and%20receivedDateTime%20lt%202022-11-18T09%3A32%3A56Z%26%24expand%3DsingleValueExtendedProperties%28%24filter%3Did%20eq%20%27String%200x0070%27%29

https://dev-api.bhspecialty.com/xchange/v1/mailfolders/Inbox/messages?%24filter=receivedDateTime%20ge%202022-11-18T04:16:58Z%20and%20receivedDateTime%20lt%202022-11-18T08:16:58Z&%24expand=singleValueExtendedProperties($filter=id+eq+'String+0x0070')

Как я могу этого добиться.

Я пробовал кодирование/декодирование URL, но это не работает.

Пример:

URLDecoder.decode(param,"UTF-8")

UriUtils.encodePath(параметр, "UTF-8");

Но ничего не работает.

Как настроить Tailwind CSS с React.js и Next.js?
Как настроить Tailwind CSS с React.js и Next.js?
Tailwind CSS - единственный фреймворк, который, как я убедился, масштабируется в больших командах. Он легко настраивается, адаптируется к любому...
LeetCode запись решения 2536. Увеличение подматриц на единицу
LeetCode запись решения 2536. Увеличение подматриц на единицу
Увеличение подматриц на единицу - LeetCode
Переключение светлых/темных тем
Переключение светлых/темных тем
В Microsoft Training - Guided Project - Build a simple website with web pages, CSS files and JavaScript files, мы объясняем, как CSS можно...
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения &quot;многие ко многим&quot; в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Карта дорог Беладжар PHP Laravel
Карта дорог Беладжар PHP Laravel
Laravel - это PHP-фреймворк, разработанный для облегчения разработки веб-приложений. Laravel предоставляет различные функции, упрощающие разработку...
0
0
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поэтому я смог сделать это, создав RequestInterceptor, а затем расшифровав URI, а также изменив свой EmailClient, чтобы он принимал PathVariable вместо RequestParam.


@GetMapping(value = "/mailfolders/Inbox/messages?$expand = {expand}&$filter = {filter}", consumes = MediaType.APPLICATION_JSON_VALUE)
    EmailRequestNew getMessages(@RequestHeader HashMap<String, Object> headers,
                                @PathVariable String filter, @PathVariable String expand);

@Component
public class FeignClientRequestInterceptor implements RequestInterceptor {
    private static Logger logger = LogManager.getLogger(FeignClientRequestInterceptor.class);
    @Override
    public void apply(RequestTemplate template) {

        try {
            template.uri(URLDecoder.decode(template.request().url(), "UTF-8"));
            logger.info("FeignClientRequestInterceptor: " + URLDecoder.decode(template.request().url(), "UTF-8") );
        } catch (UnsupportedEncodingException e) {
            logger.log(Level.INFO,"Error in FeignClientRequestInterceptor: " + template.request().url() );
            throw new RuntimeException(e);
        }
    }
}

Это окончательный созданный uri:

Другие вопросы по теме