Как вызвать другой API-интерфейс rest с моего контроллера в Micronaut, как в Spring-Boot RestTemplate?

У меня есть следующая функция из Spring Boot. Я не могу сделать это с декларативным клиентом, поэтому мой домен uri менялся после каждого вызова, поэтому мне нужен RestTemplate, как в Spring Boot.

Как добиться того же в Микронавте?

private static void getEmployees()
{
   final String uri = "http://localhost:8080/springrestexample/employees.xml";

   RestTemplate restTemplate = new RestTemplate();
   String result = restTemplate.getForObject(uri, String.class);

   System.out.println(result);
}

person 3logy    schedule 12.07.2019    source источник


Ответы (1)


Что-то вроде этого - хорошая отправная точка ...

import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.http.client.annotation.Client;

import javax.inject.Inject;

@Controller("/")
public class SomeController {
    // The url does not have to be
    // hardcoded here.  Could be
    // something like
    // @Client("${some.config.setting}")
    @Client("http://localhost:8080")
    @Inject
    RxHttpClient httpClient;

    @Get("/someuri")
    public HttpResponse someMethod() {
        String result = httpClient.toBlocking().retrieve("/springrestexample/employees.xml");
        System.out.println(result);

        // ...

        return HttpResponse.ok();
    }
}

Надеюсь, это поможет.

ИЗМЕНИТЬ

Другой похожий подход:

import io.micronaut.http.HttpResponse;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.client.RxHttpClient;
import io.micronaut.http.client.annotation.Client;

@Controller("/")
public class SomeController {
    private final RxHttpClient httpClient;

    public SomeController(@Client("http://localhost:8080") RxHttpClient httpClient) {
        this.httpClient = httpClient;
    }

    @Get("/someuri")
    public HttpResponse someMethod() {
        String result = httpClient.toBlocking().retrieve("/springrestexample/employees.xml");
        System.out.println(result);

        // ...

        return HttpResponse.ok();
    }
}
person Jeff Scott Brown    schedule 12.07.2019
comment
Дополнительная информация доступна в нашем руководстве пользователя по адресу https://docs.micronaut.io/1.1.4/guide/index.html#httpClient. - person Jeff Scott Brown; 12.07.2019
comment
есть ли возможность программно изменить url-адрес клиента? потому что я получаю URL-адрес из другого API, и он может измениться? Спасибо - person 3logy; 16.07.2019
comment
Базовый URL-адрес клиента нельзя изменить после создания. Однако вы все равно можете выполнять запросы с полностью определенными URL-адресами, и он будет игнорировать базовый URL-адрес, который был предоставлен изначально. - person James Kleeh; 26.09.2019