РЕДАКТИРОВАТЬ ДЛЯ ЯСНОСТИ: мы используем JsonSchema2POJO в нашем файле gradle.config для генерации java классов при сборке. Эти классы постоянно удаляются и создаются, когда мы очищаем и строим, поэтому настройка классов, а не файла gradle или схемы не поддерживается. В скрипте Gradle JsonSchema2POJO мы установили includeAdditionalProperties = true, а во всех схемах мы установили «additionalProperties»: true. Однако, когда в объект включаются дополнительные свойства, подлежащие проверке на соответствие схеме, Джексон генерирует исключение UnrecognizedPropertyException. Исключение не возникает, если мы явно объявляем объект «additionalProperties»: {} в json, но я ищу способ получить любые дополнительные свойства, которые можно просто добавить к объекту additionalProperties в классе java без явного объявления объекта «additionalProperties»: {} в сообщении json, желательно из файлов gradle или схемы.
Я отправляю запрос json во вновь созданную службу. Как меня проинструктировали кодировать, несколько разных схем объединены в одну: все схемы должны иметь "someString", и в зависимости от значения "someString" запрос анализируется на один из нескольких объектов - для одного может потребоваться «someOtherString», в то время как другой может не использовать «someOtherString» и вместо этого использовать «someInteger». После поступления запроса и анализа значения someString его можно преобразовать в другой объект на основе этого значения.
Схема для службы выглядит так:
"mySchema . json "
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"someString": {
"type": "string",
"minLength": 1
},
"required": [
"someString"
],
"javaName": "mySchemaObject",
"additionalProperties": true
}
}
Однако, когда я пытаюсь отправить запрос ниже, я перехватываю исключение ниже:
JSON Request:
{
"someString": "someStringValue",
"someObject": {
"someOtherString": someOtherStringValue
}
}
Exception:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "someObject" (Class: com.my.package.someClass)
То же самое происходит с запросом ниже:
{
"someString": "someStringValue",
"someOtherString": someOtherStringValue
}
Exception:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "someOtherString" (Class: com.my.package.someClass)
Если я настрою запрос на следующее, он пройдет через фильтр:
{
"someString": "someStringValue,
"additionalProperties": {
"someOtherString": "someOtherStringValue"
}
}
Во всех примерах, которые я вижу схем, включающих additionalProperties, вам действительно не нужно включать объект "additionalProperties" ... это уникально для Джексона? Есть ли способ установить какие-либо свойства, не указанные в схеме, как дополнительные свойства по умолчанию?