Springboot + OpenFeignを使ってインターフェースだけでRestClientを作る

エキサイト株式会社 メディア開発の佐々木です。

RestTemplateやWebClientを使っていましたが、インターフェースだけでRestClientを作れるOpenFeignを試してみます。

Gradleの設定は下記を追加する。

dependencies {
    ...
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    ...
}

RestClientの実装はインターフェースを定義するだけになります。

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(value = "weatherApi", url = "${weather.url}")
public interface WeatherApi {

    @RequestMapping(value = "bosai/forecast/data/overview_forecast/{cityCode}.json")
    WeatherData getWeather(@PathVariable("cityCode") String cityCode);
}

変数部分は、 application.yml に記載します。

weather.url = https://www.jma.go.jp/

データクラスは、いつもどおりLombokを使って作ります。

import lombok.Data;

import java.time.ZonedDateTime;

@Data
public class WeatherData {

    private String publishingOffice;
    private ZonedDateTime reportDatetime;
    private String targetArea;
    private String headlineText;
    private String text;
}

RestControllerクラスから、DIを使用して呼び出せば使用できます。

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("weather")
@RequiredArgsConstructor
public class WeatherController {

    private final WeatherApi zipcodeAPI;

    @GetMapping
    public Object index(@RequestParam(value = "cityCode",required = false) String cityCode){
        return zipcodeAPI.getWeather(cityCode);
    }

}

RestTemplateやWebClientを使っていましたが、これくらい簡単なら選択肢に入りそうですね。