Digamos que estoy haciendo una llamada a una API que responde con el siguiente JSON para un producto:
{
"id": 123,
"name": "The Best Product",
"brand": {
"id": 234,
"name": "ACME Products"
}
}
Puedo mapear la identificación del producto y el nombre muy bien usando las anotaciones de Jackson:
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;
}
}
Y luego usando el método fromJson para crear el producto:
JsonNode apiResponse = api.getResponse();
Product product = Json.fromJson(apiResponse, Product.class);
Pero ahora estoy tratando de averiguar cómo tomar el nombre de la marca, que es una propiedad anidada. Esperaba que algo como esto funcionara:
@JsonProperty("brand.name")
public String getBrandName() {
return brandName;
}
Pero, por supuesto, no fue así. ¿Existe una manera fácil de lograr lo que quiero usando anotaciones?
La respuesta JSON real que estoy tratando de analizar es muy compleja y no quiero tener que crear una clase completamente nueva para cada subnodo, aunque solo necesito un campo.