web-dev-qa-db-ja.com

Spring-Bootでサーバーから別のREST APIを呼び出します

ユーザーの特定のリクエストでバックエンドから別のweb-apiを呼び出したいです。たとえば、Google FCM sendメッセージapiを呼び出して、イベントの特定のユーザーにメッセージを送信します。

Retrofitにこれを達成する方法はありますか?そうでない場合、どうすればそれができますか?

38
Kenji

このWebサイトには、SpringのRestTemplateを使用するための素敵な例があります。 これは、単純なオブジェクトを取得する方法のコード例です。

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);
}
68
Torsten N.

別のAPI/URIを呼び出して出力としてカスタムPOJOオブジェクトの詳細を取得するの代わりに、このソリューションを試してください。 RestTemplateの使用方法についても明確で役立つことを願っています。

Spring Bootでは、最初に@ Configuration注釈付きクラスの下にRestTemplateのBeanを作成する必要があります。以下のように、別のクラスを作成して@Configurationで注釈を付けることもできます。

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
       return builder.build();
    }
}

次に、RestTemplateを使用しようとしているサービス/コントローラーの下でRestTemplate with @ Autowiredまたは@ Injectedを定義する必要があります。以下のコードを使用して、

@Autowired
private RestTemplate restTemplate;

次に、上記で作成したRestTemplateを使用して、アプリケーションから別のapiを呼び出す方法の一部を確認します。このために、execute()getForEntity()getForObject()などのような複数のメソッドを使用できます。ここにコードを配置していますexecute()の例。私は他の2つも試しましたが、返されたLinkedHashMapを予想されるPOJOオブジェクトに変換する問題に直面しました。以下のexecute()メソッドは私の問題を解決しました。

ResponseEntity<List<POJO>> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, null, new ParameterizedTypeReference<List<POJO>>() {
});
List<POJO> pojoObjList = responseEntity.getBody();

ハッピーコーディング:)

3
Nallamachu