Я пытаюсь выполнить сериализацию пользовательского исключения в Java с помощью метода writeValueAsString() из библиотеки Jackson. Я намерен отправить его по 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' в вашем пользовательском исключении. Я вижу только сеттеры. Можете ли вы попробовать включить геттеры? – Jackall
Мне не нужны геттеры, но для этого случая я добавил их протестированными, и это не помогает. – lexx