Jsem načítání JSON objekt z API s obsahuje:
"palette": ["#019701","#FE82B8","#FAFF04","#017FFF","#FD8141"],
Mám pojo, jako je:
public class PanelInfo {
// ...
private Color[] colorPalette;
// ...
}
Rekonstruovat snažil jsem se přidat:
class ColorJsonDeserializer extends JsonDeserializer<Color> {
@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return Color.decode(p.getValueAsString());
}
}
a jiné varianty extrakce z p.getValueAsString()
.
Ne jít. Všechno, co jsem vyzkoušet vrací:
kom.fasterxml.jackson.databind.exc.MismatchedInputException: Nelze vytvořit instanci
java.awt.Color
(i když alespoň jeden Stvořitel existuje): String argument konstruktoru/tovární metodu rekonstruovat z hodnotu Řetězce ('#221875')
Zdá se, že nejsem práce s JsonParser správně. Nějaké nápady?
Aktualizace: Díky https://stackoverflow.com/users/11713777/dariosicily To je pracovní kód:
public class PanelInfo {
...
@JsonDeserialize(contentUsing = ColorJsonDeserializer.class)
public Color[] palette;
...
}
a deserializer třída:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.awt.Color;
import java.io.IOException;
public class ColorJsonDeserializer extends JsonDeserializer<Color> {
@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return new Color(Integer.parseUnsignedInt(p.getValueAsString().substring(1), 16));
}
}
Poznámka podřetězec, jak se zbavit předních #