본문 바로가기

Kotlin/Spring

(Spring) Type mismatch: inferred type is Duration but TemporalAmount! was expected 애러 해결

금일 인증 토큰을 생성하는 JwtPlugIn 을 만드는 과정에서 뜬금없이 

Type mismatch: inferred type is Duration but TemporalAmount! was expected

 

이런 컴파일 애러를 확인 했다

 

fun generateToken(subject: String, email: String, role: String, expirationPeriod : Duration): String{

         val key = Keys.hmacShaKeyFor(secret.toByteArray(StandardCharsets.UTF_8))
         val now = Instant.now()
         val claims: Claims = Jwts.claims()
             .add(mapOf("email" to email, "role" to role))
             .build()


        return Jwts.builder()
            .subject(subject)
            .issuer(issuer)
            .issuedAt(Date.from(now))
            .expiration(Date.from(now.plus(expirationPeriod)))
            .claims(claims)
            .signWith(key)
            .compact()
    }

코드는 이러한데 여기서 expiration 이 타입이 안 맞는 다는 것이다

안쪽으로 들어가서 매개변수 타입을 보니 Date 타입이고 

plus 도 타입에 맞게 잘 넣은 것을 볼 수 있다

 

그러면 뭐가 문제냐 봤는데 문제는 여기에 있었다

 

import io.jsonwebtoken.Claims
import io.jsonwebtoken.Jws
import io.jsonwebtoken.Jwts
import io.jsonwebtoken.security.Keys
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import java.nio.charset.StandardCharsets
import java.time.Instant
import java.util.*
import kotlin.time.Duration

잘 찾아보니까 여기서 Duration이 Kotlin으로 Import가 되어 있었던 반면에 나머지 Time 및 util은 Java에서 Import 된 것을 확인 할 수 있었다 이 부분에서 Java가 Kotlin으로 컴파일 되는 과정에서 Type mismatch가 난 것으로 확인했다

 

import io.jsonwebtoken.Claims
import io.jsonwebtoken.Jws
import io.jsonwebtoken.Jwts
import io.jsonwebtoken.security.Keys
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import java.nio.charset.StandardCharsets
import java.time.Instant
import java.util.*
import java.time.Duration

 

이 부분을 java로 고치니까 정상 컴파일 확인했다

 

역시 import 할 때도 파일 라이브러리 명 및 위치도 잘 확인하고 해야겠네;;