假设我正在调用一个API,该API用产品的以下JSON响应:
{ "id": 123, "name": "The Best Product", "brand": { "id": 234, "name": "ACME Products" } }
我可以使用Jackson标注来映射产品ID和名称:
public class ProductTest { private int productId; private String productName, brandName; @JsonProperty("id") public int getProductId() { return productId; } public void setProductId(int productId) { this.productId = productId; } @JsonProperty("name") public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } public String getBrandName() { return brandName; } public void setBrandName(String brandName) { this.brandName = brandName; } }
然后使用fromJson方法创建产品:
JsonNode apiResponse = api.getResponse(); Product product = Json.fromJson(apiResponse, Product.class);
但是现在我试图弄清楚如何获取品牌名称,这是一个嵌套属性。我希望这样的事情会起作用:
@JsonProperty("brand.name") public String getBrandName() { return brandName; }
但是,当然没有。有没有一种简单的方法可以使用注释来完成我想要的工作?
我尝试解析的实际JSON响应非常复杂,即使我只需要一个字段,我也不必为每个子节点都创建一个全新的类。
您可以这样实现:
String brandName; @JsonProperty("brand") private void unpackNameFromNestedObject(Map<String, String> brand) { brandName = brand.get("name"); }