私はエンティティを持っています:
E{
String screen;
}
json 文字列として受け取る値の 1 つに screen-field を割り当てる必要があります。
"screen":{"ldpi":"1.jpg","mdpi":"2.jpg","hdpi":"3.jpg","xhdpi":"4.jpg"}
残念ながら、E クラスは orm システムで使用されるため、単なる文字列の代わりにコンテナー クラスを宣言することはできません。
それを達成するために、カスタム値デシリアライザーを作成しました。
public class DensityDeserializer extends JsonDeserializer<String> {
public final static int LDPI = 0;
public final static int MDPI = 1;
public final static int HDPI = 2;
public final static int XHDPI = 3;
private int mDensity = LDPI;
public DensityDeserializer() {
}
public DensityDeserializer(int density) {
mDensity = density;
}
@Override
public String deserialize(JsonParser jsonparser,
DeserializationContext deserializationcontext) throws IOException,
JsonProcessingException {
ScreenContainer screenContainer = jsonparser
.readValueAs(ScreenContainer.class);
switch (mDensity) {
default:
return "";
case LDPI:
return screenContainer.getLdpi();
case MDPI:
return screenContainer.getHdpi();
case HDPI:
return screenContainer.getHdpi();
case XHDPI:
return screenContainer.getXhdpi();
}
}
public static class ScreenContainer {
public String ldpi = "";
public String mdpi = "";
public String hdpi = "";
public String xhdpi = "";
public ScreenContainer() {
// TODO Auto-generated constructor stub
}
public String getLdpi() {
return ldpi;
}
public void setLdpi(String ldpi) {
this.ldpi = ldpi;
}
public String getMdpi() {
return mdpi;
}
public void setMdpi(String mdpi) {
this.mdpi = mdpi;
}
public String getHdpi() {
return hdpi;
}
public void setHdpi(String hdpi) {
this.hdpi = hdpi;
}
public String getXhdpi() {
return xhdpi;
}
public void setXhdpi(String xhdpi) {
this.xhdpi = xhdpi;
}
}
}
プログラムを実行すると、例外がスローされます。
01-11 12:29:06.833: W/System.err(1501): com.fasterxml.jackson.databind.JsonMappingException: JSON 文字列から [単純な型、クラス .DensityDeserializer$ScreenContainer] の値をインスタンス化できません。単一文字列のコンストラクタ/ファクトリ メソッドはありません (参照チェーンを介して: E.["screen"])
助言がありますか ?