😭프로젝트 진행중 외부와의 api통신을 하는 로직에 시간을 단축하기 위해 캐시를 걸기로 하였습니다.
그러나@Cacheable
을 적용하는 순간 아래와 같은 오류가 발생하였습니다.
@Cacheable(value = "id", key = "#userId")
public ResponseEntity<?> getId(Integer userId) {
...생략
return return ResponseEntity.ok(data);
}
...생략
java.lang.IllegalArgumentException:
DefaultSerializer requires a Serializable
...생략
🤔구글링을 통해 찾아본 결과 캐시에 저장을 하기 위해서는
Serializable
을 상속받아야 한다고 되어 있습니다.ResponseEntity
의 경우는 위 조건을 만족하지 않기에 위와 같은 오류가 뜬 것입니다.
이를 해결하기 위해서는 반환 값을Serializable
을 상속받은 값으로 교체해주면 됩니다.
@Cacheable(value = "id", key = "#userId")
public String getId(Integer userId) {
...생략
return "hello world";
}
@Cacheable(value = "id", key = "#userId")
public ReturnData<String> getId(Integer userId) {
...생략
return ReturnData<String>;
}
static class ReturnData<T> implements Serializable {
private T content;
}
이 외에도 더 좋은 방법이 있다면 알려주시면 감사합니다.🫡