mirror of https://github.com/hykilpikonna/AquaDX
[O] Rewrite BooleanIntDeserializer
parent
3d58a15b10
commit
809004e16b
|
@ -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;
|
||||
|
|
|
@ -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");
|
||||
};
|
||||
}
|
||||
}
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue