Джексон выбрасывает исключение UnrecognizedPropertyException для объекта, но для "additionalProperties" установлено значение True - PullRequest
0 голосов
/ 26 мая 2020

РЕДАКТИРОВАТЬ ДЛЯ ЯСНОСТИ: мы используем 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" ... это уникально для Джексона? Есть ли способ установить какие-либо свойства, не указанные в схеме, как дополнительные свойства по умолчанию?

...