Jak rekonstruovat pole hex barvách awt.barva s Jacksonem

0

Otázka

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 #

jackson java
2021-11-22 21:24:43
1

Nejlepší odpověď

1

Můžete komentovat své palette pole s JsonDeserialize anotace a contentUsing deserializer třídy, protože palette je Color pole, a nikoli jednu hodnotu:

public class PanelInfo {

    @JsonDeserialize(contentUsing = ColorJsonDeserializer.class)
    private Color[] palette;
}
2021-11-23 16:12:47

To je trik, který jsem nevěděl. Díky.
Scaddenp

@Scaddenp Jste vítáni.
dariosicily

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................