2016-06-15 3 views
2
data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String) { 
    constructor() : this("", "", "", "") 
} 

두 번째 ctor를 인수없이 얻는 가장 쉬운 방법은 무엇입니까 (json desrialization 용)?Kotlin의 빈 두 번째 공급자

+0

그것은 잘못된 질문을하는 것이 가능하고, XY 문제 (HTTP : // xyproblem.info/) ... "기본 빈 생성자가없는 Kotlin 데이터 클래스에 대해 JSON을 deserialize하는 방법은 무엇입니까?" 그렇다면 아래에 대한 답변을 추가했습니다. –

답변

4

는이 경우에 대한 규칙 (이 : 매개 변수없는 생성자가 생성되는 모든 매개 변수가 기본값이있는 경우 :

는 명시 적으로 빈 생성자와 귀하의 솔루션 장점이있다
//Kotlin 
data class UserRto(val lastName: String = "", 
        val firstName: String = "", 
        val email: String = "", 
        val password: String = "") 

//Java 
new UserRto(); 
new UserRto("a", "a", "a", "a"); 

모든 매개 변수가 있어야합니다 제공되었거나 제공되지 않음. 그러나 대부분의 경우 큰 문제가 아니며 거의 사용되지 않습니다.

3

사용중인 JSON 직렬화 라이브러리를 지정하지 않았습니다. 이 2 차 생성자는 전혀 필요하지 않으며 모든 특성을 매개 변수로 포함하는 클래스 생성자와 직접 작업 할 수 있습니다. 잭슨

  • 가 자동으로 등록되는 모든 매개 변수와 함께 생성자 또는 공장을 호출하는 기능을 포함 Kotlins unqiue 모든 경우 (그리고 2.8.x에서이에 사용되는 매개 변수에 대한 기본값을 포함 처리 Jackson-Kotlin module 사용 JSON의 누락 된 속성)
  • Gson의 경우 Kotson이 동일한 작업을 수행 할 수 있습니다.

Google은 이러한 라이브러리 나 다른 라이브러리에서도 다른 것을 찾을 수 있습니다.

은 그럼 당신은하기 만합니다 :

data class UserRto(val lastName: String, val firstName: String, val email: String, val password: String) 

그리고 잭슨 코 틀린 모듈

단순히 것 :

val user: UserRto = jacksonObjectMapper().readValue(jsonString)