【发布时间】:2021-06-22 22:54:15
【问题描述】:
我正在从 IEX 云批处理端点请求数据。该请求包含一个带有多个交易品种的查询字符串并返回相关的市场数据。为了使问题更简单,我只显示下面响应的一个子集。我还使用https://www.jsonschema2pojo.org/ 自动构建我的 POJO 并将其显示在请求下方。我的请求在示例中包含一批用于 AAPL 和 FB 的符号,但它可以包含任意数量的用户在生产中选择的符号。鉴于响应的结构,如何创建通用符号 POJO?正如您在下面看到的,JSONSchema 为每个符号创建一个 POJO(例如 Aapl POJO 和 FB POJO),但我并不总是知道请求了什么符号或其中有多少。
来自批量符号请求的 IEX 云响应。
{
"AAPL": {
"quote": {
"symbol": "AAPL",
"latestPrice": 133.985
}
},
"FB": {
"quote": {
"symbol": "FB",
"latestPrice": 339.13
}
}
}
由 JSONSchema.org 构建的 POJO。
-----------------------------------com.example.Aapl.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"quote"
})
@Generated("jsonschema2pojo")
public class Aapl {
@JsonProperty("quote")
public Quote quote;
}
-----------------------------------com.example.Fb.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"quote"
})
@Generated("jsonschema2pojo")
public class Fb {
@JsonProperty("quote")
public Quote__1 quote;
}
-----------------------------------com.example.Quote.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"symbol",
"latestPrice"
})
@Generated("jsonschema2pojo")
public class Quote {
@JsonProperty("symbol")
public String symbol;
@JsonProperty("latestPrice")
public Double latestPrice;
}
-----------------------------------com.example.Quote__1.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"symbol",
"latestPrice"
})
@Generated("jsonschema2pojo")
public class Quote__1 {
@JsonProperty("symbol")
public String symbol;
@JsonProperty("latestPrice")
public Double latestPrice;
}
-----------------------------------com.example.Security.java-----------------------------------
package com.example;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"AAPL",
"FB"
})
@Generated("jsonschema2pojo")
public class Security {
@JsonProperty("AAPL")
public Aapl aapl;
@JsonProperty("FB")
public Fb fb;
}
【问题讨论】:
-
你可能想要
@JsonRootName("quote")和Map<String, Quote>。