문제
api key 변수를 yml 파일에 넣고 @Value 어노테이션으로 끌어다 쓰고 싶어 코드를 수정
변경 전
private static String AUTH_TOKEN = "access_token";
변경 후
@Value("${api-key.key}")
private static String AUTH_TOKEN;
하지만 실제 구동 시켜 api호출을 하면
Cannot invoke "String.length()" because "s" is null%
요런 에러가 발생
원인
static 필드는 스프링 컨테이너가 로드 되기 전에 class area에 저장이 되기 때문에,
스프링 컨테이너에 의존적인 @Value 어노테이션이 정상적으로 작동하지 않는다.
해결 방법
static 필드에 직접 @Value 어노테이션 선언을 하지 말고
setter 메서드를 생성, @Value를 조합하면 정상적으로 값을 끌어올 수 있다.
최종 수정 코드
private static String AUTH_TOKEN;
@Value("${api-key.key}")
public void setKey(String value) {
AUTH_TOKEN = value;
}
'PROGRAMMING > SPRING' 카테고리의 다른 글
| [SPRING] @EqualsAndHashCode(callSuper = true) (0) | 2024.06.02 |
|---|---|
| [SPRING] Spring boot 3.x에서 QueryDSL 설정 (0) | 2024.05.20 |
| [SWAGGER] 프로젝트 API 문서 자동화 (0) | 2022.01.25 |
| [SWAGGER] Swagger 적용 후 LocalDateTime 포맷 깨질 때 (0) | 2022.01.20 |
| [SPRING] JdbcSQLSyntaxErrorException: Table "SPRING_SESSION" not found; SQL statement: 오류 (0) | 2022.01.10 |