Apache Верблюд, как потерпеть неудачу на неизвестных свойствах в демаршаллинге - PullRequest
0 голосов
/ 28 января 2020

Я работаю в системе, которая использует Apache Camel и Spring-boot, и я хочу, чтобы мои маршруты возвращали ошибку, если в объект запроса был отправлен неизвестный параметр.

Я знаю, как сделать это с Джексоном напрямую (настройка объекта bean объекта-сопоставителя), но в моем случае маршрут настраивается без возможности передать подходящий пользовательский сопоставитель объектов.

На самом деле, в моем маршруте у меня есть:

from(...)
.unmarshal().json(JsonLibrary.Jackson, MyInputDtoClass.class)
.process(FirstProcessor.BEAN)
.process(SecondProcessor.BEAN)
.to(OtherRoute.ROUTE) 

Если я добавлю аннотацию Джексона на мой MyInputDtoClass:

@JsonIgnoreProperties(ignoreUnknown = false)
public class MyInputDtoClass {
   ...
}

, это все равно позволит запросу быть отмененным, даже если Я добавляю неизвестные параметры в тело запроса. Как заблокировать отправку неизвестных свойств и вернуть ошибку?

1 Ответ

1 голос
/ 31 марта 2020

Вы можете создать JacksonDataFormat для демаршаллинга на вашем маршруте:

Примерно так:

JacksonDataFormat dataFormat = new JacksonDataFormat();
dataFormat.setUnmarshalType(MyInputDtoClass.class);

//This will enable the feature you are looking for
dataFormat.enableFeature(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

from(...)
.unmarshal(dataFormat)
.process(FirstProcessor.BEAN)
.process(SecondProcessor.BEAN)
.to(OtherRoute.ROUTE)
...