[O] Rewrite BooleanIntDeserializer

matching
Azalea 2024-12-29 05:11:51 -05:00
parent 3d58a15b10
commit 809004e16b
3 changed files with 24 additions and 36 deletions

View File

@ -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;

View File

@ -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<Integer> {
@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");
};
}
}

View File

@ -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<Int>() {
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")
}
}
}