Порядок свойств в определениях чванства меняется от прогона к прогону

Я использую swagger-maven-plugin генерировать swagger.json. Однако я заметил, что порядок свойств меняется от запуска к запуску. Например, это может быть:

{
  ...
  "definitions" : {
    "MyClass1" : {
      "type" : "object",
      "properties" : {
        "name" : {
          "type" : "string"
        },
        "title" : {
          "type" : "string"
        },
        "description" : {
          "type" : "string"
        },
      }
    }
  }
  ...
}

а затем после следующего поколения:

{
  ...
  "definitions" : {
    "MyClass1" : {
      "type" : "object",
      "properties" : {
        "description" : {
          "type" : "string"
        },
        "title" : {
          "type" : "string"
        },
        "name" : {
          "type" : "string"
        }
      }
    }
  }
  ...
}

Мой класс по Java:

public interface MyClass1 {
   String getName();
   String getTitle();
   String getDescription();
}

1 ответ

Решение

В Java Runtime невозможно узнать точный порядок методов, объявленных в классе. Если вы откроете java.lang.Class#getDeclaredMethods() (см. https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html) вы увидите, что The elements in the returned array are not sorted and are not in any particular order.,

Вот почему Джексон не может сделать это для вас.

Однако есть 2 решения:

1.Вы можете использовать @JsonPropertyOrder аннотация:

@JsonPropertyOrder({"name", "title", "description"})
public interface MyClass1 {
   String getName();
   String getTitle();
   String getDescription();
}

2.Вы можете использовать класс с полями (порядок полей сохраняется)

public class MyClass1 {
   String name;
   String title;
   String description;
   //Getters skipped
}
Другие вопросы по тегам