вложенные json в java объекты List <Object>возвращает ожидаемые значения, а List <DefinedObject>возвращает нулевые значения - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть следующий json, который я хотел бы сохранить в java-объекте:

{  
       "shippingDetails":{  
          "address":"khalda",
          "country":"Jordan",
          "town":"amman"
       },
       "product":[  
          {  
             "product":{  
                "id":2,
                "name":"Wrap Dress",
                "price":330,
                "salePrice":165,
                "discount":50,
                "pictures":[  
                   "assets/images/fashion/product/1.jpg",
                   "assets/images/fashion/product/1.jpg",
                   "assets/images/fashion/product/1.jpg",
                   "assets/images/fashion/product/1.jpg"
                ],
                "shortDetails":"test",
                "description":"test",
                "stock":2,
                "new":true,
                "sale":false,
                "category":"women",
                "colors":[  
                   "gray",
                   "orange"
                ],
                "size":[  
                   "M",
                   "L",
                   "XL"
                ],
                "tags":[  
                   "caprese",
                   "puma",
                   "lifestyle"
                ],
                "variants":[  
                   {  
                      "color":"gray",
                      "images":"assets/images/fashion/product/1.jpg"
                   },
                   {  
                      "color":"orange",
                      "images":"assets/images/fashion/product/1.jpg"
                   }
                ]
             },
             "quantity":1
          }
       ],
       "totalAmount":330
    }

И у меня есть для этого следующие бобы Java: Основной объект класса называется Order и имеет

@Data
@Entity
@Table(name = "orders")
public class Order {
    @Id
    @Column(name="shippingDetailsId")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @OneToOne(cascade = {CascadeType.ALL})
    private ShippingDetails shippingDetails;
    //@OneToMany(cascade = {CascadeType.ALL})
    //List<Product> products;
    List<Object> product = new ArrayList<>();
    private float totalAmount;
}

и классы внутренних объектов:

@Data
@Entity
@Table(name = "products")
public class Product {
    @Id
    @Column(name = "productId")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @ManyToOne
    private Order order;
    private Boolean isNew;
    private String salePrice;
    private String shortDetails;
    private String discount;
    private String description;
    private Variants[] variants;
    private String[] pictures;
    private String[] colors;
    private String[] tags;
    private String sale;
    private String[] size;
    private String price;
    private String name;
    private String stock;
    private String category;
}

и детали доставки:

@Data
@Entity
@Table(name = "shippingDetails")
public class ShippingDetails {
    @Id
    @Column(name="shippingDetailsId")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String address;
    private String country;
    private String town;
}

Я пробовал много способов, но ни один из них не сработал, сначала я попытался принять объект Order в моем контроллере и попытаться сохранить его, но не сработал, результаты были:

при использовании списка все значения выводятся на консоль по желанию и вставляются в базу данных, но в той же таблице «Заказы», ​​это не то, что я ищу, я хочу, чтобы продукты были сохранены в отдельной таблице под названием «Продукты». поэтому я использовал List.

при использовании Список значений продукта был нулевым.

Затем я попытался принять строку из моего контроллера и использовать библиотеку GSON для преобразования ее в объект Order, но он также не работал, я получил множество исключений, пытаясь выяснить это, и попробовал много способов, которые были упомянуты на stackoverflow и других веб-сайтах, но не повезло, пожалуйста, обратите внимание, что я проверил мою строку json, и это действительный json.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Если вы видите иерархию в JSON, она не соответствует вашему Java-объекту.

 "product":[  // Parent-Product
          {  
             "product":{  // Child-Product
                "id":2,

Прямое сопоставление с Java было бы что-то вроде

List<Map<String,Product>> products

Если у вас есть возможность изменить файл JSON, измените его на что-то вроде ниже и избавьтесь от иерархии Parent-Child Product.

"product":[
  {
    "id":..
  },
  {
    "id":..
  }
  ..
]
0 голосов
/ 22 апреля 2019

Вы можете использовать конвертер здесь.Он генерирует Java-объекты из JSON.http://www.jsonschema2pojo.org/ (помимо прочего, он поддерживает gson и jackson)

Это обеспечит правильное отображение Json на Java и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...