에러: Field 'username' is required for type with serial name 'com.example.data.model.UserDTO', but it was missing at path: $.data at path: $.data개발/Android Studio 에러2024. 8. 13. 19:43
Table of Contents
로그인 이후, 내 정보를 보는 Activity에 접근했을 때 자동으로 내 username을 띄우게 진행하였다.
이때 username을 불러오는데 실패하며 발생한 오류이다.
https://stackoverflow.com/questions/64796913/kotlinx-serialization-missingfieldexception
검색을 해보면 DTO쪽 문제인 것 같다.
import com.example.domain.model.User
import kotlinx.serialization.Serializable
@Serializable
data class UserDTO (
val id: Long,
val loginId: String,
val username: String,
val extraUserInfo: String,
val profileFilePath: String
)
fun UserDTO.toDomainModel(): User {
return User(
id = this.id,
loginId = this.loginId,
username = this.username,
profileImageUrl = this.profileFilePath
)
}
- 만약 네트워크 통신, API를 통해 데이터를 @POST 하거나 @GET 해오는데 @Serializable가 없다면 추가해야한다.
- 추가했는데도 문제가 있다면 필자처럼 DTO에서 잘못 썼을 수도 있다.
SettingViewModel에서 오류를 발생시키는 곳에서 사용하는 DTO는 다음과 같다.
Retrofit 통신을 통해 Spring Boot 웹서버의 Swagger UI API에서 받아올때 사용하는 녀석이다.
위 DTO와 Swagger UI API의 내 정보 조회 Response body를 비교해보자.
기존에 username으로 작성되어있으나, Response Body에서는 userName으로 작성되어 있는 것을 확인할 수 있다.
import com.example.domain.model.User
import kotlinx.serialization.Serializable
@Serializable
data class UserDTO (
val id: Long,
val loginId: String,
val userName: String,
val extraUserInfo: String,
val profileFilePath: String
)
fun UserDTO.toDomainModel(): User {
return User(
id = this.id,
loginId = this.loginId,
username = this.userName,
profileImageUrl = this.profileFilePath
)
}
문제되는 부분만 수정하면 정상적으로 Profile Image 밑에 UserName을 띄우고 있는 것을 확인할 수 있다.
'개발 > Android Studio 에러' 카테고리의 다른 글
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!