Я использую Camel 2.16.0 для проекта Camel Rest. Я представил абстрактный тип, для обработки которого мне нужен собственный десериализатор. Это работает, как и ожидалось, в моих модульных тестах десериализации, где я регистрирую свой пользовательский десериализатор в Objectmapper для тестов. Насколько я понимаю, можно также зарегистрировать пользовательские модули в Jackson Objectmapper, используемом Camel (верблюд json).
Моя конфигурация:
...
<camelContext id="formsContext" xmlns="http://camel.apache.org/schema/spring">
...
<dataFormats>
<json id="json" library="Jackson" useList="true" unmarshalTypeName="myPackage.model.CustomDeserialized" moduleClassNames="myPackage.MyModule" />
</dataFormats>
</camelContext>
Мой модуль:
package myPackage;
import com.fasterxml.jackson.databind.module.SimpleModule;
public class MyModule extends SimpleModule {
public MyModule() {
super();
addDeserializer(CustomDeserialized.class, new MyDeserializer());
}
}
Конфигурация верблюжьего отдыха:
restConfiguration()
.component("servlet")
.bindingMode(RestBindingMode.json)
.dataFormatProperty("prettyPrint", "true")
.contextPath("/")
.port(8080)
.jsonDataFormat("json");
При запуске службы и вызове функции, использующей средство сопоставления объектов, я получаю исключение:
com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of myPackage.model.CustomDeserialized, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
Любые предложения о том, что не так с моей настройкой?
hal+json
в свой тестовый проект. В основном я определяю свой собственная версияDefaultDataFormatResolver
и зарегистрируйте ее в верблюжий контекст. - person Roman Vottner   schedule 23.11.2018