Как замаскировать любой параметр в автоматически сгенерированном Swagger Java-классе - PullRequest
0 голосов
/ 03 мая 2019

Как замаскировать любой параметр в автоматически сгенерированном Java-классе Swagger?
Если класс с установщиком вручную мы можем редактировать метод toString, но в автоматически сгенерированном классе он будет генерировать Swagger Pojo-класс в каждой сборке, так как изменить метод toString, который генерируется автоматическичванством?

Ниже приведен код

api.yml (который генерирует класс POJO через сваггер)

InsuredDTO:
type: object
properties:
  id:
    type: integer
    format: int64
  name:
    type: string
  nric:
    type: string

toString Метод внутри автоматического генерирования класса POJO

@Override
public String toString() {
  StringBuilder sb = new StringBuilder();
  sb.append("class InsuredDTO {\n");

  sb.append("    id: ").append(toIndentedString(id)).append("\n");
  sb.append("    name: ").append(toIndentedString(name)).append("\n");
  sb.append("    nric: ").append(toIndentedString(nric)).append("\n");
  sb.append("}");
  return sb.toString();
}

Добавление нескольких журналов внутри LoggingAspect class

log.debug("Enter: {}.{}() with argument[s] = {}", joinPoint.getSignature().getDeclaringTypeName(),
            joinPoint.getSignature().getName(), Arrays.toString(joinPoint.getArgs()));

В этом журнале joinPoint.getArgs() имеет полные данные toString с именем Idи nric, здесь я хочу отобразить маскированный nric вместо прямого nric value.

Если это не автоматически сгенерированный класс, тогда мы можем добавить что-то вроде ниже в toStringМетод.

sb.append("nric: ").append("********").append("\n");

Но в этом случае автоматически сгенерированный класс есть ли способ замаскировать любое свойство только для целей ведения журнала?

Я пробовал с флагом в файле yml, как показано ниже

properties:
  id:
    type: integer
    format: int64
  nric:
    type: string
    format: password

Но этот также не форматирует свойство ожидаемым образом.

1 Ответ

0 голосов
/ 06 мая 2019

Я добавляю аналогичное требование к старому проекту, я использовал поле расширения (см. Спецификация OpenAPI 3.0 , конец файла), например x-nolog и генератор нестандартного кода:

Пример схемы:

User:
  type: object
  required:
  - name
  - password
  x-nolog:
  - password
  properties:
    name:
      type: string
    password:
      type: string

Чтобы создать собственный генератор кода, вы можете увидеть:

...