@Cacheable 직렬화 오류

greenTea·2023년 6월 25일
0

@Cacheable 직렬화 오류

😭프로젝트 진행중 외부와의 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을 상속받은 값으로 교체해주면 됩니다.

반환 값을 Serializable을 상속 받은 값으로 교체

@Cacheable(value = "id", key = "#userId")
public String getId(Integer userId) {

	...생략
	return  "hello world";
}

새로운 객체를 생성 한 후 Serializable을 상속받게 하기

@Cacheable(value = "id", key = "#userId")
public ReturnData<String> getId(Integer userId) {

	...생략
	return  ReturnData<String>;
}

static class ReturnData<T> implements Serializable {
	private T content;
}

이 외에도 더 좋은 방법이 있다면 알려주시면 감사합니다.🫡

profile
greenTea입니다.

0개의 댓글