オブジェクトがJSON解析時の属性に対応しない+空文字列+列挙の問題を解決する
1653 ワード
JSON列をオブジェクトとして解析する場合、属性が対応していない場合、または列挙が空の文字列の場合、解析エラーが発生します.この場合、いくつかの構成で解決し、直接コードをアップロードできます.
対象配列を含むJSONをListに解析したところ、良い方法が見つからず、先に配列に解析してからListに変換することができます
package com.dms.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonUtils {
public static String encode(Object obj) {
ObjectMapper om = new ObjectMapper();
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
JsonGenerator generator = om.getFactory().createGenerator(baos,
JsonEncoding.UTF8);
generator.writeObject(obj);
String result = new String(baos.toByteArray(), "utf-8");
return result;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
try {
if (baos != null) {
baos.close();
}
} catch (IOException e) {
}
}
}
public static T decode(String content, Class valueType) {
ObjectMapper om = new ObjectMapper();
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,
true);
om.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL,
true);
try {
return om.readValue(content, valueType);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
対象配列を含むJSONをListに解析したところ、良い方法が見つからず、先に配列に解析してからListに変換することができます
Image[] imageList1 = JsonUtils.decode((String) router.requestGet(),Image[].class);