Как сгенерировать RequestBody типа Map <String, Object> с помощью springdoc для swagger open api 3.0?
public Item addProperties(
@Parameter(description = "identifier of the item")
@PathVariable("id") String id,
@Parameter(description = "map of property names and values ",
content = @Content(schema = @Schema(type = "object", implementation = Map.class)))
@RequestBody Map<String, Object> properties)
Для приведенного выше кода только параметр id
создается и полностью отсутствует requestBody. Я добавил type="object" на основе https://swagger.io/docs/specification/data-models/dictionaries/.
2 ответа
Тип RequestBody должен быть классом. Таким образом, любая реализация Map будет работать (например, HashMap)
@RequestBody HashMap<String, Object> properties
The Map
тип игнорируется Open API ( хотя у меня нет надежной ссылки на это утверждение ).
См.: GitHub ~ Проблемы ~ #597 ~ Тело запроса для карт, недоступных в пользовательском интерфейсе Swagger.
Вот обходной путь, описанный выше в проблеме GitHub.
static {
SpringDocUtils.getConfig().removeRequestWrapperToIgnore(java.util.Map.class);
}
Поместите этот статический блок внутрь вашего@SpringBootApplication
сорт. Это должно решить проблему.
@RequestBody Map<String, Object> properties // Should now generate correctly
Смотрите также
- https://github.com/springdoc/springdoc-openapi/issues/743
- https://github.com/springfox/springfox/issues/1503
- Разве Springdoc swagger невозможен при передаче HttpServletRequest в качестве параметра метода?
- Пользовательская схема для Spring Boot 2 OpenAPI 3 Documentation
- Задокументируйте карту @RequestBody в Swagger