๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽจ Projects/์—๋Ÿฌ๋ชจ์Œ

[์—๋Ÿฌ๋ชจ์Œ] java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String

by HelloRabbit 2023. 3. 23.
728x90

์—๋Ÿฌ ์ƒํ™ฉ

์ž๋ฐ”์—์„œ ์—ฌ๋Ÿฌ ๋กœ๊ทธ์ธ API๋ฅผ ์ด์šฉํ•ด ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ ๊ตฌ๊ธ€, ํŽ˜์ด์Šค๋ถ, ๋„ค์ด๋ฒ„๋Š” ๋‹ค ์ž˜ ๋๋Š”๋ฐ ์นด์นด์˜ค UserInfo.java๋งŒ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.

์—๋Ÿฌ ๋ฉ”์„ธ์ง€

public class KakaoUserInfo implements OAuth2UserInfo {

	private Map<String, Object> attributes;		// getAttributes()
	private Map<String, Object> attributesAccount;	// getAttributes().get("kakao_account")
	private Map<String, Object> attributesProfile;	// attributesAccount.get("profile")
	
  	public KakaoUserInfo(Map<String, Object> attributes) {
		this.attributes = attributes;
		this.attributesAccount = (Map<String, Object>) attributes.get("kakao_account");
		this.attributesProfile = (Map<String, Object>) attributesAccount.get("profile");
	}
	
    	// ๋ฌธ์ œ์˜ (String) ์บ์ŠคํŒ… ๋ถ€๋ถ„!
	@Override
	public String getProviderId() {
		return (String) attributes.get("id");
	}

	@Override
	public String getProvider() {
		return "kakao";
	}

	// ๋ฌธ์ œ์˜ (String) ์บ์ŠคํŒ… ๋ถ€๋ถ„!
	@Override
	public String getEmail() {
		return (String) attributesAccount.get("email");
	}

	// ๋ฌธ์ œ์˜ (String) ์บ์ŠคํŒ… ๋ถ€๋ถ„!
	@Override
	public String getName() {
		return (String) attributesProfile.get("nickname");
	}

}

 

ํ•ด๊ฒฐ

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ (String)์œผ๋กœ ์บ์ŠคํŒ… ๋ฐฉ๋ฒ•์„ ์“ฐ์ง€ ์•Š๊ณ  ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ Object๋ฅผ .toString() ํ•จ์ˆ˜๋ฅผ ์จ์„œ String์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋‹ˆ ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค.

public class KakaoUserInfo implements OAuth2UserInfo {

	private Map<String, Object> attributes;			// getAttributes()
	private Map<String, Object> attributesAccount;	// getAttributes().get("kakao_account")
	private Map<String, Object> attributesProfile;	// attributesAccount.get("profile")
	
  	public KakaoUserInfo(Map<String, Object> attributes) {
		this.attributes = attributes;
		this.attributesAccount = (Map<String, Object>) attributes.get("kakao_account");
		this.attributesProfile = (Map<String, Object>) attributesAccount.get("profile");
	}
	
    	// toString() ์จ์„œ ํ•ด๊ฒฐ!
	@Override
	public String getProviderId() {
		return attributes.get("id").toString();
	}

	@Override
	public String getProvider() {
		return "kakao";
	}

	// toString() ์จ์„œ ํ•ด๊ฒฐ!
	@Override
	public String getEmail() {
		return attributesAccount.get("email").toString();
	}

	// toString() ์จ์„œ ํ•ด๊ฒฐ!
	@Override
	public String getName() {
		return attributesProfile.get("nickname").toString();
	}

}

 

์—๋Ÿฌ๊ฐ€ ๋‚œ ์ด์œ ๋Š” (String) ์บ์ŠคํŒ…์€ Object๊ฐ€ ์ด๋ฏธ String ํ˜•ํƒœ์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” getProviderId()๋ฅผ ํ–ˆ์„ ๋•Œ id๊ฐ€ ์ˆซ์ž๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”๊ฐ€ int๋ฅผ ๋ฐ”๋กœ String์œผ๋กœ ์บ์ŠคํŒ… ํ•  ์ˆ˜ ์—†์–ด ClassCastException ์—๋Ÿฌ๋ฅผ ๋‚ธ ๊ฒƒ์ด๋‹ค.

 

.toString() ํ•จ์ˆ˜๋Š” Object๊ฐ€ null๊ฐ’๋งŒ ์•„๋‹ˆ๋ฉด String ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์บ์ŠคํŒ… ๋ง๊ณ  toString()์„ ์จ์ฃผ๊ธฐ๋กœ ํ•˜์ž!

 

 

 

๋Œ“๊ธ€