package sagan.support.cache; import org.springframework.cache.annotation.Cacheable; import org.springframework.http.HttpEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestOperations; @Component public class CachedRestClient { public static final String CACHE_NAME = "cache.network"; public static final String CACHE_TTL_KEY = "cache.network.timetolive"; public static final String CACHE_TTL = "${cache.network.timetolive:300}"; @Cacheable(value = CACHE_NAME, key = "#url") public <T> T get(RestOperations operations, String url, Class<T> clazz) { return operations.getForObject(url, clazz); } public <T> T post(RestOperations operations, String url, Class<T> clazz, String body) { HttpEntity<String> requestEntity = new HttpEntity<>(body); return operations.postForObject(url, requestEntity, clazz); } }