Exception in thread "main" java.lang.IllegalArgumentException: JsonSerializer of type com.example.ItemSerializer does not define valid handledType() (use alternative registration method?) at org.codehaus.jackson.map.module.SimpleSerializers.addSerializer(SimpleSerializers.java:62) at org.codehaus.jackson.map.module.SimpleModule.addSerializer(SimpleModule.java:54) at com.example.JsonTest.main(JsonTest.java:54)
Как я могу использовать пользовательский сериализатор с Jackson?
Как уже упоминалось, @JsonValue - хороший способ. Но если вы не возражаете против пользовательского сериализатора, нет необходимости писать его для Item, а скорее для User - если это так, это было бы так же просто, как:
Еще одной возможностью является реализация JsonSerializable, в этом случае регистрация не требуется.
Что касается ошибки; это странно - вы, вероятно, хотите перейти на более позднюю версию. Но его также безопаснее расширять org.codehaus.jackson.map.ser.SerializerBase поскольку он будет иметь стандартные реализации несущественных методов (т. Е. Все, кроме фактического вызова сериализации).
Ответ 3
Я тоже пытался это сделать, и в примере кода на веб-странице Jackson ошибка, из-за которой не удается включить тип (.class) в вызов addSerializer() метода, который должен читаться следующим образом:
Другими словами, это строки, которые создают экземпляр simpleModule и добавляют сериализатор (при этом предыдущая неправильная строка закомментирована):
@JsonValue работает только с методами, поэтому вы должны добавить метод getId . Вы должны иметь возможность вообще пропустить свой пользовательский сериализатор.