0
JSONエンコードされたカスタム例外を直列化解除しようとしていますが、例外によってスタックトレースが無効になると失敗します。jackson:カスタム例外を非直列化します
の作業例:
public static class CustomException extends Exception {
public CustomException(String msg) {
super(msg);
}
}
@Test
public void testSerializeAndDeserializeCustomException() throws Exception {
log.info("Test: testSerializeAndDeserializeCustomException");
CustomException ex1 = new CustomException("boom");
ObjectMapper om = new ObjectMapper();
String json = om.writerFor(CustomException.class).writeValueAsString(ex1);
assertNotNull(json);
log.info("JSON: {}", json);
CustomException ex2 = om.readerFor(CustomException.class).readValue(json);
assertNotNull(ex2);
assertEquals(ex2.getMessage(), ex1.getMessage());
}
ない作業例:第2のケースで
public static class CustomNoStackException extends Exception {
public CustomNoStackException(String msg) {
super(msg, null, true, false);
}
}
@Test
public void testSerializeAndDeserializeCustomNoStackException() throws Exception {
log.info("Test: testSerializeAndDeserializeCustomNoStackException");
CustomNoStackException ex1 = new CustomNoStackException("boom");
ObjectMapper om = new ObjectMapper();
String json = om.writerFor(CustomNoStackException.class).writeValueAsString(ex1);
assertNotNull(json);
log.info("JSON: {}", json);
CustomNoStackException ex2 = om.readerFor(CustomNoStackException.class).readValue(json);
assertNotNull(ex2);
assertEquals(ex2.getMessage(), ex1.getMessage());
}
は、readValue(json)
は実際IOException
に包まれCustomNoStackException
をスローします。
私は間違っていますか?
ありがとうございます。それを修正する方法がありますか?おそらく 'getCause()'をオーバーライドし、 '@ JsonIgnore'に注釈をつけてください - うまくいくようですが、それは良い考えですか? – Hank