エキサイト株式会社 メディア開発の佐々木です。
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を使っていましたが、これくらい簡単なら選択肢に入りそうですね。