嵌套json到java对象列表<;对象>;返回预期值,但列出<;定义对象>;返回空值
我希望将以下json存储到java对象中:嵌套json到java对象列表<;对象>;返回预期值,但列出<;定义对象>;返回空值,java,arrays,json,list,Java,Arrays,Json,List,我希望将以下json存储到java对象中: { "shippingDetails":{ "address":"khalda", "country":"Jordan", "town":"amman" }, "product":[ { "product":{ "id":2,
{
"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 bean:
主对象类称为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;
}
以及配送详细信息bean:
@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;
}
我尝试了很多方法,但都没有成功,首先我尝试在控制器中接受订单对象并尝试存储它,但没有成功,结果是:
当使用列表时,所有的值都会根据需要打印到控制台,并插入数据库中,但以相同的表顺序,这不是我要寻找的,我希望产品保存在一个名为Products的单独表中,所以我使用了列表
使用列表时,产品的值为空
然后我尝试从我的控制器接收一个字符串,并使用GSON库将其转换为Order对象,但效果不好,我遇到了许多异常,试图找出它,并尝试了stackoverflow和其他网站上提到的许多方法,但没有成功,请不要告诉我,我已经验证了我的json字符串,它是一个有效的json。您可以在这里使用转换器。它从json生成java对象。 (包括它支持的gson和jackson)
这将确保Json到Java的映射正确,反之亦然 如果在JSON中看到层次结构,它与Java对象不匹配
"product":[ // Parent-Product
{
"product":{ // Child-Product
"id":2,
直接映射到Java类似于
列出产品
如果您可以选择更改JSON文件,那么可以更改为以下内容,并摆脱父子产品层次结构
"product":[
{
"id":..
},
{
"id":..
}
..
]
什么部分在下降?是从JSON到Java对象的转换,还是将Java对象存储到数据库?还提到了异常,如果没有异常,很难理解出了什么问题。@subirKumarSao我已经编辑了我的问题,但有异常,我仍在尝试将json转换为java对象。我已经达到了这样一个水平,产品中的所有值都插入了空值到数据库中,但装运详细信息和总金额插入成功我尝试过这样的工具,但我的数据库中的值为空,甚至在插入到数据库之前,仅通过将值打印到控制台,产品值就为空。问题似乎来自“private Item product”字段的Order.java和Item.java,其中有列表和private Order。我建议您一步一步地开始,看看您是如何对其进行建模的。也许发电机可以帮你,这就是我向你推荐的原因。还要考虑当转换为JSON和JSON时,某些字段不能序列化/去序列化。也许你可以考虑,删除It.java,只使用订单。java和Product.java(ti用json表示),并删除项java;我已经一步一步地做了,我发现我的问题在产品类中,因为当我使用List时,它会将值打印到控制台,但是当我使用列表时,我得到了空值。有什么建议吗?列表很有意义,但是当我尝试它时,我得到了编译错误:org.hibernate.AnnotationException:使用'@'一个多个或'@'多个目标是未映射的class@Khaled因为hibernate无法理解这个复杂的层次结构,要么更改JSON,要么编写自定义解析器来映射产品。
"product":[
{
"id":..
},
{
"id":..
}
..
]