Car*_*vus 4 java serialization json jackson deserialization
public class TestJacksonColor {
public static void main(String [] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Color black = new Color(0, 0, 0);
String json = objectMapper.writeValueAsString(black);
Color backToObject = objectMapper.readValue(json, Color.class);
}
}
Run Code Online (Sandbox Code Playgroud)
该代码尝试使用 jackson objectmapper 将 java.awt.color 类序列化。获取生成的 json 字符串并将其反序列化回 java.awt.color 类。但是,在进行反序列化时,会发生以下错误。
线程“main”com.fasterxml.jackson.databind.JsonMappingException 中的异常:找不到适合类型 [简单类型,类 java.awt.Color] 的构造函数:无法从 JSON 对象实例化
您将需要一个自定义序列化器和反序列化器。周围有一些预先构建的模块,但我不知道有一个处理java.awt.Color
.
这是一个定义序列化器/反序列化器对并注册一个模块来处理Color
对象的示例:
public class JacksonColorTest {
public static class ColorSerializer extends JsonSerializer<Color> {
@Override
public void serialize(Color value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeFieldName("argb");
gen.writeString(Integer.toHexString(value.getRGB()));
gen.writeEndObject();
}
}
public static class ColorDeserializer extends JsonDeserializer<Color> {
@Override
public Color deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
TreeNode root = p.getCodec().readTree(p);
TextNode rgba = (TextNode) root.get("argb");
return new Color(Integer.parseUnsignedInt(rgba.textValue(), 16), true);
}
}
public static void main(String [] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Color.class, new ColorSerializer());
module.addDeserializer(Color.class, new ColorDeserializer());
objectMapper.registerModule(module);
Color testColor = new Color(1, 2, 3, 4);
String json = objectMapper.writeValueAsString(testColor);
Color backToObject = objectMapper.readValue(json, Color.class);
if (!testColor.equals(backToObject)) {
throw new AssertionError("round trip failed");
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1285 次 |
最近记录: |