我从一个API获取一个JSON对象,包括:
"palette": ["#019701","#FE82B8","#FAFF04","#017FFF","#FD8141"],
我有这样的pojo:
public class PanelInfo {
// ...
private Color[] colorPalette;
// ...
}
要反序列化,我尝试添加:
class ColorJsonDeserializer extends JsonDeserializer<Color> {
@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return Color.decode(p.getValueAsString());
}
}
以及从< code > p . getvalueasstring()中提取的其他变体。
不去。我尝试的一切都会得到回报:
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造java.awt.Color
的实例(尽管至少存在一个创建者):没有字符串参数构造函数/工厂方法可以从字符串值('#221875')反序列化
似乎我没有正确使用JsonParser。有什么想法吗?
更新:感谢 https://stackoverflow.com/users/11713777/dariosicily 这是工作代码:
public class PanelInfo {
...
@JsonDeserialize(contentUsing = ColorJsonDeserializer.class)
public Color[] palette;
...
}
和解串器类:
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));
}
}
注意子字符串以摆脱前导#
您可以使用JsonDeserialize
注释和contentUsing
反序列化程序类来注释调色板
字段,因为palette
是一个Color
数组,而不是一个值:
public class PanelInfo {
@JsonDeserialize(contentUsing = ColorJsonDeserializer.class)
private Color[] palette;
}