✨ [common-util] Gson 의존성 및 GsonUtils 추가
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
dependencies {
|
||||
implementation("com.google.code.gson:gson")
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package me.jiniworld.demohx
|
||||
|
||||
import com.google.gson.FieldNamingPolicy
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.TypeAdapter
|
||||
import com.google.gson.stream.JsonReader
|
||||
import com.google.gson.stream.JsonWriter
|
||||
import mu.KotlinLogging
|
||||
import java.time.LocalDate
|
||||
import java.time.LocalDateTime
|
||||
import java.time.LocalTime
|
||||
import java.time.format.DateTimeFormatter
|
||||
|
||||
object GsonUtils {
|
||||
private val logger = KotlinLogging.logger {}
|
||||
|
||||
private val patternDate = "yyyy-MM-dd"
|
||||
private val patternTime = "HH:mm:ss"
|
||||
private val patternDateTime = "yyyy-MM-dd HH:mm:ss"
|
||||
|
||||
private val gson = GsonBuilder()
|
||||
.disableHtmlEscaping()
|
||||
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
|
||||
.setDateFormat(patternDateTime)
|
||||
.registerTypeAdapter(LocalDateTime::class.java, LocalDateTimeAdapter().nullSafe())
|
||||
.registerTypeAdapter(LocalDate::class.java, LocalDateAdapter().nullSafe())
|
||||
.registerTypeAdapter(LocalTime::class.java, LocalTimeAdapter().nullSafe())
|
||||
.create()
|
||||
|
||||
fun toJson(obj: Any): String {
|
||||
return gson.toJson(obj)
|
||||
}
|
||||
|
||||
fun <T> fromJson(str: String, clazz: Class<T>): T {
|
||||
return gson.fromJson(str, clazz)
|
||||
}
|
||||
|
||||
// fun toJson(obj: Any): String? {
|
||||
// val result = gson.toJson(obj)
|
||||
// return if("null" == result) null else result
|
||||
// }
|
||||
//
|
||||
// fun <T> fromJson(str: String, clazz: Class<T>): T? {
|
||||
// try {
|
||||
// return gson.fromJson(str, clazz)
|
||||
// } catch (e: JsonSyntaxException) {
|
||||
// logger.error{ e.message }
|
||||
// }
|
||||
// return null
|
||||
// }
|
||||
|
||||
class LocalDateAdapter : TypeAdapter<LocalDate>() {
|
||||
private val format: DateTimeFormatter = DateTimeFormatter.ofPattern(patternDate)
|
||||
|
||||
override fun write(writer: JsonWriter, value: LocalDate?) {
|
||||
value?.let { writer.value(value.format(format)) }
|
||||
}
|
||||
|
||||
override fun read(reader: JsonReader): LocalDate {
|
||||
return LocalDate.parse(reader.nextString(), format)
|
||||
}
|
||||
}
|
||||
|
||||
class LocalDateTimeAdapter : TypeAdapter<LocalDateTime>() {
|
||||
private val format: DateTimeFormatter = DateTimeFormatter.ofPattern(patternDateTime)
|
||||
|
||||
override fun write(writer: JsonWriter, value: LocalDateTime?) {
|
||||
value?.let { writer.value(value.format(format)) }
|
||||
}
|
||||
|
||||
override fun read(reader: JsonReader): LocalDateTime {
|
||||
return LocalDateTime.parse(reader.nextString(), format)
|
||||
}
|
||||
}
|
||||
|
||||
class LocalTimeAdapter : TypeAdapter<LocalTime>() {
|
||||
private val format: DateTimeFormatter = DateTimeFormatter.ofPattern(patternTime)
|
||||
|
||||
override fun write(writer: JsonWriter, value: LocalTime?) {
|
||||
value?.let { writer.value(value.format(format)) }
|
||||
}
|
||||
|
||||
override fun read(reader: JsonReader): LocalTime {
|
||||
return LocalTime.parse(reader.nextString(), format)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user