У меня есть спецификация c json из веб-сайта prestashop, и мне не удается правильно десериализовать с помощью playframework 2.8
{
"orders": [
{
"id": 44,
"id_address_delivery": "95",
"id_address_invoice": "95",
"id_cart": "121",
"id_currency": "2",
"id_lang": "2",
"id_customer": "61",
"id_carrier": "19",
"current_state": "5",
"module": "stripe_official",
"invoice_number": "0",
"invoice_date": "0000-00-00 00:00:00",
"delivery_number": "41",
"delivery_date": "2020-01-19 23:16:05",
"valid": "1",
"date_add": "2020-01-19 18:38:10",
"date_upd": "2020-01-19 23:16:06",
"shipping_number": "",
"id_shop_group": "1",
"id_shop": "1",
"secure_key": "23e5bfbd764ab60bd23aa1c7d70e8e4e",
"payment": "Paiement par Stripe",
"recyclable": "0",
"gift": "0",
"gift_message": "",
"mobile_theme": "0",
"total_discounts": "0.000000",
"total_discounts_tax_incl": "0.000000",
"total_discounts_tax_excl": "0.000000",
"total_paid": "28.000000",
"total_paid_tax_incl": "28.000000",
"total_paid_tax_excl": "28.000000",
"total_paid_real": "28.000000",
"total_products": "28.000000",
"total_products_wt": "28.000000",
"total_shipping": "0.000000",
"total_shipping_tax_incl": "0.000000",
"total_shipping_tax_excl": "0.000000",
"carrier_tax_rate": "0.000",
"total_wrapping": "0.000000",
"total_wrapping_tax_incl": "0.000000",
"total_wrapping_tax_excl": "0.000000",
"round_mode": "2",
"round_type": "2",
"conversion_rate": "1.000000",
"reference": "JRRCSMHKI",
"associations": {
"order_rows": [
{
"id": "133",
"product_id": "45",
"product_attribute_id": "0",
"product_quantity": "1",
"product_name": "Kebab - Sandwich ou Menu: Sandwich seul; - Sauce: Biggy burger; - Crudités: Salade; Maïs",
"product_reference": "",
"product_ean13": "",
"product_isbn": "",
"product_upc": "",
"product_price": "5.500000",
"id_customization": "0",
"unit_price_tax_incl": "5.500000",
"unit_price_tax_excl": "5.500000"
}
]
}
}
]
}
Проблема в том, с объектом ассоциаций, я действительно не понимаю, потому что в конце я хочу только список заказов с каждым заказом списка товаров ... Мне удалось получить список заказов таким образом, но потом я не смог справиться, я начал с этого, но продукт мог не быть десериализованным
List<Order> orders= Json.mapper().readValue(json.get("orders").traverse(), new TypeReference<List<Order>>(){});
и мой класс подобен этому
package models;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import utils.ProductDeserializer;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Order {
private Long id;
private State state;
private String payment;
@JsonProperty(value="delivery_date")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
private Date deliveryDate;
@JsonProperty(value="total_paid_tax_incl")
private float totalPaid;
@JsonDeserialize(using=ProductDeserializer.class)
private List<Product> products;
public float getTotalPaid() {
return totalPaid;
}
public void setTotalPaid(float totalPaid) {
this.totalPaid = totalPaid;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public String getPayment() {
return payment;
}
public void setPayment(String payment) {
this.payment = payment;
}
public Date getDeliveryDate() {
return deliveryDate;
}
public void setDeliveryDate(Date deliveryDate) {
this.deliveryDate = deliveryDate;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
Десериализатор не вызывается, я пытаюсь с объектом Associations в OrderR aws затем product, но это бесполезный класс Я хочу что-то простое и эффективное. Любая идея?
package utils;
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import models.Product;
import play.libs.Json;
public class ProductDeserializer extends StdDeserializer<List<Product>>{
/**
*
*/
private static final long serialVersionUID = 1L;
public ProductDeserializer() {
this(null);
}
public ProductDeserializer(Class<?> vc) {
super(vc);
}
@Override
public List<Product> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.getCodec().readTree(p);
return Json.mapper().readValue(node.get("associations").get("order_rows").traverse(), new TypeReference<List<Product>>(){});
}
}