我試圖使用Jackson庫中的writeValueAsString()方法序列化Java中的自定義異常。我打算通過HTTP發送到另一臺機器。這個工作有點偏激,因爲在序列化之後並不是所有的字段都包含在JSON中。頂級異常Throwable實現Serializable接口,並且還有一些構造函數添加有關要序列化的信息。我想事實是在這裏的某個地方。請幫助一些建議。這裏是我的自定義異常代碼:將自定義異常序列化爲JSON,並非所有字段都已序列化
import java.io.Serializable;
public class MyException extends RuntimeException{
private static String type = null;
private static String severity = null;
// somewhere on google I red that should use setters to make serialize work
public static void setType(String type) {
MyException.type = type;
}
public static void setSeverity(String severity) {
MyException.severity = severity;
}
public MyException(String message) {
super(message);
}
}
某處代碼我使用:
MyException exc = new MyException("Here goes my exception.");
MyException.setType(exc.getClass().getSimpleName());
MyException.setSeverity("Major");
throw exc;
,並在其他地方,我有:
ObjectMapper mapper = new ObjectMapper();
try {
responseBuilder.entity(mapper.writeValueAsString(MyException));
}
catch (JsonGenerationException e) {e.printStackTrace(); }
catch (JsonMappingException e) {e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
結果JSON對象是:
{"cause":null,"message":"Here goes my exception.","localizedMessage":"Here goes my exception.","stackTrace":[{...a usual stack trace...}]}
這裏我也期待查看我的類型和嚴重性字段。
我沒有在您的自定義異常中看到字段「type」和「severity」的getters - 我只能看到setter。你可以嘗試包括吸氣劑嗎? – Jackall
我不需要獲得者,但是對於這種情況,我添加了他們測試過的並且沒有幫助。 – lexx