Сопоставление перечислений с разными именами констант и константными значениями ⇐ JAVA
Сопоставление перечислений с разными именами констант и константными значениями
Рассмотрим следующий класс:
пакет org.kurodev.progfrog.game.map; импортировать com.fasterxml.jackson.annotation.JsonValue; импортировать io.swagger.v3.oas.annotations.media.Schema; @Schema(enumAsRef = true) общественное перечисление TileType { СТЕНА("X"), ЭТАЖ("0"), ПУСТОТА("#"), ; частный окончательный строковый идентификатор; TileType (строковый идентификатор) { this.identifier = идентификатор; } public static TileType идентификация (char s) { return идентификация(String.valueOf(s)); } public static TileType идентификация (String s) { for (значение TileType: значения()) { если (value.matches(s)) возвращаемое значение; } вернуть ноль; } public static TileTypeidentifyStrict(char s) { return defineStrict(String.valueOf(s)); } public static TileTypeidentifyStrict(String s) { for (значение TileType: значения()) { если (value.matches(s)) возвращаемое значение; } throw new MapValidationException("Нераспознанная плитка: " + s); } @JsonValue публичная строка getIdentifier() { идентификатор возврата; } частные логические совпадения (String s) { вернуть s.equals(идентификатор); } } При использовании swagger для генерации yaml это выглядит так: (я показываю только часть перечисления)
Тип плитки: тип: строка перечисление: - ИКС - "0" - '#' Если я удалю аннотацию @JsonValue из метода получения, это приведет к
Тип плитки: тип: строка перечисление: - Стена - Пол - Пустота Но на самом деле я ищу следующее (или что-то подобное)
Тип плитки: тип: строка перечисление: - ИКС - "0" - '#' x-enum-имя_переменных: - СТЕНА - ПОЛ - ПУСТОТА чтобы при генерации клиента (например для машинописи) код получался
export const TileType = { СТЕНА: «Х», ЭТАЖ: '0', ПУСТОТА: '#' } как константа; вместо
export const TileType = { Х: 'Х', _0: '0', Хэш: '#' } как константа; Я уже пробовал следующие аннотации в различных созвездиях: @Schema, @JsonProperty, @JsonValue, @JsonCreator, @JsonSerialize(using = SerializerClass. class), а также написание класса ModelConverter.
@Component публичный класс CustomEnumConverter реализует ModelConverter { частный окончательный ModelResolver defaultConverter; @Autowired public CustomEnumConverter (ObjectMapper objectMapper) { this.defaultConverter = новый ModelResolver(objectMapper); } @Override разрешение публичной схемы (тип AnnotatedType, контекст ModelConverterContext, цепочка Iterator) { Модель схемы = defaultConverter.resolve(тип, контекст, цепочка); if (type.getType().getTypeName().contains(TileType.class.getName()))) { model.addExtension("x-enum-varnames", Arrays.toString(TileType.values())); } возвратная модель; } } В этом последнем подходе я был особенно уверен. Я проверил, что мне звонят, и он записывает расширение на карту, но оно не добавляется в файл .yaml...
Может ли кто-нибудь помочь? Я в недоумении. Надеюсь, этот вопрос в некоторой степени ясен.
Рассмотрим следующий класс:
пакет org.kurodev.progfrog.game.map; импортировать com.fasterxml.jackson.annotation.JsonValue; импортировать io.swagger.v3.oas.annotations.media.Schema; @Schema(enumAsRef = true) общественное перечисление TileType { СТЕНА("X"), ЭТАЖ("0"), ПУСТОТА("#"), ; частный окончательный строковый идентификатор; TileType (строковый идентификатор) { this.identifier = идентификатор; } public static TileType идентификация (char s) { return идентификация(String.valueOf(s)); } public static TileType идентификация (String s) { for (значение TileType: значения()) { если (value.matches(s)) возвращаемое значение; } вернуть ноль; } public static TileTypeidentifyStrict(char s) { return defineStrict(String.valueOf(s)); } public static TileTypeidentifyStrict(String s) { for (значение TileType: значения()) { если (value.matches(s)) возвращаемое значение; } throw new MapValidationException("Нераспознанная плитка: " + s); } @JsonValue публичная строка getIdentifier() { идентификатор возврата; } частные логические совпадения (String s) { вернуть s.equals(идентификатор); } } При использовании swagger для генерации yaml это выглядит так: (я показываю только часть перечисления)
Тип плитки: тип: строка перечисление: - ИКС - "0" - '#' Если я удалю аннотацию @JsonValue из метода получения, это приведет к
Тип плитки: тип: строка перечисление: - Стена - Пол - Пустота Но на самом деле я ищу следующее (или что-то подобное)
Тип плитки: тип: строка перечисление: - ИКС - "0" - '#' x-enum-имя_переменных: - СТЕНА - ПОЛ - ПУСТОТА чтобы при генерации клиента (например для машинописи) код получался
export const TileType = { СТЕНА: «Х», ЭТАЖ: '0', ПУСТОТА: '#' } как константа; вместо
export const TileType = { Х: 'Х', _0: '0', Хэш: '#' } как константа; Я уже пробовал следующие аннотации в различных созвездиях: @Schema, @JsonProperty, @JsonValue, @JsonCreator, @JsonSerialize(using = SerializerClass. class), а также написание класса ModelConverter.
@Component публичный класс CustomEnumConverter реализует ModelConverter { частный окончательный ModelResolver defaultConverter; @Autowired public CustomEnumConverter (ObjectMapper objectMapper) { this.defaultConverter = новый ModelResolver(objectMapper); } @Override разрешение публичной схемы (тип AnnotatedType, контекст ModelConverterContext, цепочка Iterator) { Модель схемы = defaultConverter.resolve(тип, контекст, цепочка); if (type.getType().getTypeName().contains(TileType.class.getName()))) { model.addExtension("x-enum-varnames", Arrays.toString(TileType.values())); } возвратная модель; } } В этом последнем подходе я был особенно уверен. Я проверил, что мне звонят, и он записывает расширение на карту, но оно не добавляется в файл .yaml...
Может ли кто-нибудь помочь? Я в недоумении. Надеюсь, этот вопрос в некоторой степени ясен.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как удалить дублирование кода между похожими константными и неконстантными функциями-членами?
Anonymous » » в форуме C++ - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пример конфликта имен между именами перечислений и методами/атрибутами миксин-класса?
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Пример конфликта имен между именами перечислений и методами/атрибутами миксин-класса?
Anonymous » » в форуме Python - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-