diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserMusicDetail.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserMusicDetail.java index d46e6554..00beb1ce 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserMusicDetail.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserMusicDetail.java @@ -3,7 +3,7 @@ package icu.samnyan.aqua.sega.chusan.model.userdata; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import icu.samnyan.aqua.sega.chusan.util.BooleanToIntegerDeserializer; +import icu.samnyan.aqua.sega.util.jackson.BooleanToIntegerDeserializer; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Table; diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/util/BooleanToIntegerDeserializer.java b/src/main/java/icu/samnyan/aqua/sega/chusan/util/BooleanToIntegerDeserializer.java deleted file mode 100644 index d5b8288a..00000000 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/util/BooleanToIntegerDeserializer.java +++ /dev/null @@ -1,35 +0,0 @@ -package icu.samnyan.aqua.sega.chusan.util; - -import com.fasterxml.jackson.core.JacksonException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import java.io.IOException; -import java.util.Locale; - -public class BooleanToIntegerDeserializer extends JsonDeserializer { - @Override - public Integer deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { - return switch (p.getCurrentToken()) { - case VALUE_STRING -> { - String value = p.getValueAsString(); - if (value.toLowerCase(Locale.ROOT).equals("true")) { - yield 1; - } else if (value.toLowerCase(Locale.ROOT).equals("false")) { - yield 0; - } else { - try { - yield Integer.parseInt(value); - } catch (NumberFormatException e) { - throw new UnsupportedOperationException("Cannot deserialize to integer field"); - } - } - } - case VALUE_NUMBER_INT -> p.getIntValue(); - case VALUE_TRUE -> 1; - case VALUE_FALSE -> 0; - default -> throw new UnsupportedOperationException("Cannot deserialize to integer field"); - }; - } -} diff --git a/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt new file mode 100644 index 00000000..cb34a5b1 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/util/jackson/BooleanToIntegerDeserializer.kt @@ -0,0 +1,23 @@ +package icu.samnyan.aqua.sega.util.jackson + +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.core.JsonToken +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.JsonDeserializer +import ext.int + +class BooleanToIntegerDeserializer : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Int { + return when (p.currentToken) { + JsonToken.VALUE_STRING -> when (val str = p.valueAsString.lowercase()) { + "true" -> 1 + "false" -> 0 + else -> str.int + } + JsonToken.VALUE_NUMBER_INT -> p.intValue + JsonToken.VALUE_TRUE -> 1 + JsonToken.VALUE_FALSE -> 0 + else -> throw UnsupportedOperationException("Cannot deserialize to boolean int") + } + } +}