swagger 定义中的属性顺序从 运行 运行 更改
Order of properties in swagger definitions changes from run to run
我用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 中的 class:
public interface MyClass1 {
String getName();
String getTitle();
String getDescription();
}
在 Java 运行时中不可能知道 class 中声明的方法的确切顺序。如果您打开 java.lang.Class#getDeclaredMethods()
(参见 https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getDeclaredMethods--),您将看到 The elements in the returned array are not sorted and are not in any particular order.
.
这就是 Jackson 不能为你做的原因。
但是,有两种解决方案:
1.You可以使用@JsonPropertyOrder
注释:
@JsonPropertyOrder({"name", "title", "description"})
public interface MyClass1 {
String getName();
String getTitle();
String getDescription();
}
2.You 可以使用带字段的 class(保留字段顺序)
public class MyClass1 {
String name;
String title;
String description;
//Getters skipped
}
我用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 中的 class:
public interface MyClass1 {
String getName();
String getTitle();
String getDescription();
}
在 Java 运行时中不可能知道 class 中声明的方法的确切顺序。如果您打开 java.lang.Class#getDeclaredMethods()
(参见 https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getDeclaredMethods--),您将看到 The elements in the returned array are not sorted and are not in any particular order.
.
这就是 Jackson 不能为你做的原因。
但是,有两种解决方案:
1.You可以使用@JsonPropertyOrder
注释:
@JsonPropertyOrder({"name", "title", "description"})
public interface MyClass1 {
String getName();
String getTitle();
String getDescription();
}
2.You 可以使用带字段的 class(保留字段顺序)
public class MyClass1 {
String name;
String title;
String description;
//Getters skipped
}