В тот момент, когда вы добавили параметр, он переставал быть переопределяющим и стал перегрузкой.
Дженерики не имеют к этому никакого отношения.
Использование additionalProperties
- это правильный способ описать hashamp с помощью спецификации OpenAPI (fka. Swagger), но пользовательский интерфейс Swagger пока не отображает их.
Проблема отслеживается здесь https: / /github.com/swagger-api/swagger-ui/issues/1248
Между тем вы можете использовать этот трюк, чтобы определить не требуемое свойство (default
в примере ниже) тот же тип объектов карты и дать некоторый намек в описании:
swagger: "2.0"
info:
version: 1.0.0
title: Hashmap
paths: {}
definitions:
MapItem:
properties:
firstname:
type: string
lastname:
type: string
Map:
description: a (key, MapItem) map. `default`is an example key
properties:
default:
$ref: '#/definitions/MapItem'
additionalProperties:
$ref: '#/definitions/MapItem'
Это описание не изменяет контракт API и улучшает документацию.
Если я правильно понимаю, основная проблема заключается в том, что нет универсально принятого сопоставления JSON для карты Java, особенно когда ключ более сложный, чем строка. Я видел, что GSON использует один подход (рассматривайте ключ как объект), тогда как Джексон берет другое (сериализует ключ к строке). C #, эквивалентный Карте (Словарь), использует третий подход (рассматривая каждую запись как объект с ключом по своему усмотрению со свойствами, называемыми «ключ» и «значение»). Поскольку Swagger пытается быть агностиком для языка и сериализатора, это ставит его в невозможное положение.