Bean Validation Tidak Jalan di Data Class Kotlin

Eko Kurniawan Khannedy 14 Juli 2017

Bean Validation Tidak Jalan di Data Class Kotlin

Saat menggunakan Kotlin, kita tidak perlu lagi membuat getter dan setter untuk attribut yang ada di class. Itu sudah secara otomatis dibuatkan oleh Kotlin.

Namun ada masalah yang terjadi saat kita membuat data class di Kotlin, lalu kita menambahkan annotation Bean Validation pada attribute nya. Jika coba dijalankan, pasti tidak akan berjalan dengan semestinya.

package com.blibli.kotlin.model.request import org.hibernate.validator.constraints.Length import org.hibernate.validator.constraints.NotBlank /** * @author Eko Kurniawan Khannedy */ data class PersonCreateRequest( @NotBlank @Length(max = 50) val firstName: String = "", @Length(max = 50) val lastName: String? = null )

Kenapa tidak jalan?

Sederhana, saat kita menambahkan Annotation di attribute data class, secara default Annotation yang kita tambahkankan adan berada di Constructor. Jadi kalo di konversi ke kelas Java, sebenarnya data class Kotlin yang kita buat, jika di Java adalah sebagai berikut.

package com.blibli.kotlin.model.request; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotBlank; /** * @author Eko Kurniawan Khannedy */ public class PersonCreateRequestJava { private String firstName; private String lastName; public PersonCreateRequestJava(@NotBlank @Length(max = 50) String firstName, @Length(max = 50) String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }

Bagaimana solusinya agar Annotation Bean Validation itu kita tempatkan pada attribute nya, bukan pada constructor data class? Simple, cukup tambahkan @field: sebelum Annotation-nya, seperti pada data class berikut :

package com.blibli.kotlin.model.request import org.hibernate.validator.constraints.Length import org.hibernate.validator.constraints.NotBlank /** * @author Eko Kurniawan Khannedy */ data class PersonCreateRequest( @field:NotBlank @field:Length(max = 50) val firstName: String = "", @field:Length(max = 50) val lastName: String? = null )

Semoga Bermanfaat