[英]Xstream and Enum Unmarshalling : No enum constant
這是我要解析的 XML 的摘錄:
<node version="1.0.7" errorCode="0" message="">
errorCode 實際上是一組固定的常量,所以我認為將它表示為 enum 是個好主意:
public enum ErrorCode {
OK (0,"ok"),
ERR (1,"Error"),
BIGERR (2,"Big Error");
private int code;
private String name;
ErrorCode(int code, String name) {...}
}
我不知道如何使用枚舉中定義的各種常量映射 xml 文件中的“0”......我不斷收到沒有枚舉常量的轉換異常:
com.thoughtworks.xstream.converters.ConversionException: No enum constant my.package.ErrorCode.0
我不知道如何為這些值指定別名......(或者如果我必須實現我自己的轉換器。)。
謝謝..
我已經用 EnumToStringConverter 做到了這一點
Map<String, ErrorCode> map = new HashMap<>();
map.put(ErrorCode.OK.getCode(), Error.OK);
map.put(ErrorCode.ERR.getCode(), Error.ERR);
map.put(ErrorCode.BIGERR.getCode(), Error.BIGERR);
xstream.registerConverter(new EnumToStringConverter<>(ErrorCode.class, map);
我遇到了同樣的問題,我通過創建一個 Converter 類來解決它。
public class MyEnumConverter implements Converter {
public static MyEnumConverter getInstance() {
return new MyEnumConverter();
}
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
writer.setValue(((MyEnum) value).name());
}
//method that return the enum value by string
//if value equals return the correct enum value
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
return MyEnum.get(reader.getValue()); //method get implemented in enum
}
@SuppressWarnings("rawtypes")
public boolean canConvert(Class clazz) {
return MyEnum.class.isAssignableFrom(clazz);
}
}
不要忘記注冊轉換器
xstream.registerConverter(MyEnumConverter.getInstance());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.