2017-08-16 163 views
0

JSON动态字段名我使用从它我生成下面的类提供了一个swagger.yaml API:与杰克逊

@ApiModel(description="the paginated history of the specification attributes values") 
public class SpecificationHistoryResponse { 

    @ApiModelProperty(example = "null", value = "the array of historic values is named with the specification attributes key") 
    private List<SpecificationResponse> key = new ArrayList<SpecificationResponse>(); 
    @ApiModelProperty(example = "null", value = "") 
    private Pagination pagination = null; 

/** 
    * the array of historic values is named with the specification attributes key 
    * @return key 
    **/ 
    public List<SpecificationResponse> getKey() { 
    return key; 
    } 

    public void setKey(List<SpecificationResponse> key) { 
    this.key = key; 
    } 

    public SpecificationHistoryResponse key(List<SpecificationResponse> key) { 
    this.key = key; 
    return this; 
    } 

    public SpecificationHistoryResponse addKeyItem(SpecificationResponse keyItem) { 
    this.key.add(keyItem); 
    return this; 
    } 

/* ... */ 
} 

使用API​​以请求以下JSON一个特定的“规范”返回一个SpecificationHistoryRespone

{ 
    "specification_key": [ 
    { 
     "value": "0.02242", 
     "source_timestamp": "2017-08-09T13:10:04.177Z" 
    }, 
    { 
     "value": "0.0124", 
     "source_timestamp": "2017-08-11T13:16:04.177Z" 
    } 
    /*...*/ 
    ], 
    "pagination": { 
    /*...*/ 
    } 
} 

使用JacksonJsonProvider我不能得到specification_key,因为它总是试图反序列化值key不存在。

回答

0

好自动生成的代码需要相当长的一段编辑应该是这样的动态字段名工作:

@ApiModel(description="the paginated history of the specification attributes values") 
public class SpecificationHistoryResponse { 

    @ApiModelProperty(example = "null", value = "the array of historic values is named with the specification attributes key") 
    @JsonAnySetter 
    private Map<String, List<SpecificationResponse>> key = new HashMap<>(); 
    @ApiModelProperty(example = "null", value = "") 
    private Pagination pagination = null; 

/** 
    * the array of historic values is named with the specification attributes key 
    * @return key 
    **/ 
    public Map<String, List<SpecificationResponse>> getKey() { 
    return key; 
    } 

    public void setKey(Map<String, List<SpecificationResponse>> key) { 
    this.key = key; 
    } 

    public SpecificationHistoryResponse key(Map<String, List<SpecificationResponse>> key) { 
    this.key = key; 
    return this; 
    } 
/* ... */ 
}