具有可变键的对象 Arraylist 的 Jackson 序列化

Jackson Serialization of an Arraylist of objects with variable key

我正在使用几个不同的 POJO 来生成 swagger API 规范。但是,我在尝试正确格式化 JSON 时遇到问题。

目前的响应如下所示:

结果JSON

 {
   "parameters": {
      "regionid": {
         "description": "Region ID for Regional Assignment",
         "required": false,
         "type": "integer",
         "format": "int32"
       },
      "timeperiodid": {
         "description": "School year time period",
         "required": false,
         "type": "integer",
         "format": "int32"
       }
    }
}

生成 Yaml

parameters:
    regionid:
      description: Region ID for Regional Assignment
      required: false
      type: integer
      format: int32
    timeperiodid:
      description: School year time period
      required: false
      type: integer
      format: int32

而不是正确的格式(对象的 ArrayList):

预计JSON

 {
   "parameters": [
    {
      "regionid": {
         "description": "Region ID for Regional Assignment",
         "required": false,
         "type": "integer",
         "format": "int32"
       }
    },
    {
      "timeperiodid": {
        "description": "School year time period",
        "required": false,
        "type": "integer",
        "format": "int32"
         }
       }
     ]
   }

预期 Yaml

parameters:
    - regionid:
        description: Region ID for Regional Assignment
        required: false
        type: integer
        format: int32
    - timeperiodid:
        description: School year time period
        required: false
        type: integer
        format: int32

方法 Class 包装和 returns 参数:

 public class Method {
   @JsonIgnore
   private String method;

   private HashMap<String, Parameter> parameters;

参数对象Class:

 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class Parameter {
   @JsonIgnore
   private String name;

   private String in;

   private String description;

   private boolean required;

   private String type;

   private String format;

我认为你应该更改这一行:

private HashMap<String, Parameter> parameters;

private HashMap<String, Parameter[]> parameters;

因为您将 "regionid" 映射到一组参数,而不仅仅是一个参数。

您的 parameters 对象中有一个数组。该数组中的对象类型看起来像 key/Parameter,因此您需要将 Map<String, Parameter> 建模为数组项。