杰克逊序列化具有可变键的对象的Arraylist

时间:2015-09-07 13:43:45

标签: java json serialization jackson swagger

我使用一些不同的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

方法类包装并返回参数:

 public class Method {
   @JsonIgnore
   private String method;

   private HashMap<String, Parameter> parameters;

参数对象类:

 @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;

1 个答案:

答案 0 :(得分:0)

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

private HashMap<String, Parameter> parameters;

private HashMap<String, Parameter[]> parameters;

将“regionid”映射到参数数组,而不仅仅是一个参数。