I need to convert a Uber Products JSON response from here to a Java object. I am using Jackson for JSON handling. My input JSON looks like:
{
"products": [
{
"capacity": 2,
"description": "Ride for less with uberPOOL",
"price_details": {},
"image": "http://d1a3f4spazzrp4.cloudfront.net/car.jpg",
"display_name": "POOL",
"product_id": "26546650-e557-4a7b-86e7-6a3942445247",
"shared": true,
},
{
"capacity": 4,
"description": "The low-cost Uber",
"price_details": {
"distance_unit": "mile",
"cost_per_minute": 0.26,
"service_fees": [
{
"fee": 1.0,
"name": "Safe Rides Fee"
}
],
"minimum": 5.0,
"cost_per_distance": 1.3,
"base": 2.2,
"cancellation_fee": 5.0,
"currency_code": "USD"
},
"cash_enabled": false,
"image": "http://d1a3f4spazzrp4.cloudfront.net/car.jpg",
"display_name": "uberX",
"product_id": "a1111c8c-c720-46c3-8534-2fcdd730040d",
"shared": false
}
]
}
My entity class looks like:
public class Products {
@JsonProperty
private int capacity;
@JsonProperty
private String description;
@JsonProperty
private String price_details;
@JsonProperty
private String image;
@JsonProperty
private Boolean cash_enabled;
@JsonProperty
private Boolean shared;
@JsonProperty
private String short_description;
@JsonProperty
private String display_name;
//getter, setter methods
}
and wrapper class looks like:
public class ProductsModel{
private List <Products> product;
public List<Products> getProduct() {
return product;
}
public void setProduct(List<Products> product) {
this.product = product;
}
}
now when i try map the JSON to my wapper class and try to print the products .. it is giving "null" not sure why .. please help to point out why.
private ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
productsModel = mapper.readValue(line1, ProductsModel.class);
response.getWriter().println("get products:" + productsModel.getProduct()); //<-- returns null - not sure why
Use the below Product and ProductsModel class it will work fine.
Product entiry:
public class Products {
@JsonProperty
private int capacity;
@JsonProperty
private String description;
@JsonProperty
private Map price_details;
@JsonProperty
private String image;
@JsonProperty
private Boolean cash_enabled;
@JsonProperty
private Boolean shared;
@JsonProperty
private String short_description;
@JsonProperty
private String display_name;
}
ProductsModel wrapper class:
public class ProductsModel {
private List<Products> products;
public List<Products> getProducts() {
return products;
}
public void setProducts(List<Products> products) {
this.products = products;
}
}
In your code there were two mistakes:
I just made both the changes in Product and ProductsModel class and it worked fine.