Java 将JSON反序列化为具有列表属性的对象
我有两个对象,一个是产品,一个是自我参照,一个是与形象的关系 从RESTAPI,我需要创建CRUD服务。我创建了以下服务: 添加新产品: {“姓名”:“主席”, “说明”:“红色椅子”} 添加新的子产品: {“名称”:“表格”, “说明”:“红色表格”} 将图像添加到产品: /产品/1/图片/添加 {“类型”:“PNG”} 更新产品: /产品/更新/1 {“姓名”:“主席”, “说明”:“蓝色椅子”} 更新图像: /图片/更新/1 {“类型”:“JPEG”} 删除产品: /产品/删除/1Java 将JSON反序列化为具有列表属性的对象,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我有两个对象,一个是产品,一个是自我参照,一个是与形象的关系 从RESTAPI,我需要创建CRUD服务。我创建了以下服务: 添加新产品: {“姓名”:“主席”, “说明”:“红色椅子”} 添加新的子产品: {“名称”:“表格”, “说明”:“红色表格”} 将图像添加到产品: /产品/1/图片/添加 {“类型”:“PNG”} 更新产品: /产品/更新/1 {“姓名”:“主席”, “说明”:“蓝色椅子”} 更新图像: /图片/更新/1 {“类型”:“JPEG”} 删除产品: /产品/删除/1 @DE
@DELETE
@Path("/product/delete/{id}")
删除图像:
/图像/删除/1
@DELETE
@Path("/image/delete/{id}")
Product.java:
@Entity
@Table
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer productId;
@Column(name = "NAME")
private String name;
@Column(name = "DESCRIPTION")
private String description;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="PRODUCT_ID")
private List<Image> images;
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
private List<Product> children;
@ManyToOne
@JoinColumn(name = "PARENT_PRODUCT_ID")
private Product parent;
当我尝试添加带有图像的产品时,出现错误:
{“name”:“bucket”,
“说明”:“红桶”,
“图像”:{“类型”:“jpeg”}
}
无法从START\ u对象标记中反序列化java.util.ArrayList的实例
在[来源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor]$UnCloseableInputStream@3c9786ad;行:2,列:27](通过引用链:br.com.model.Product[“images”])
需要帮助:
json字符串中的
images
属性不是数组/列表,而是对象。它也应该用[]
来封装,而不仅仅是用{}
来封装。这就是反序列化失败的原因。您的意思是:{“名称”:“bucket”,“说明”:“red bucket”,“images”:[“type”:“jpeg”]}不,像这样:{“名称”:“bucket”,“description”:“red bucket”,“images”:[{“type”:“jpeg”}}试试看,但没有成功,这是jetty log:Product上打印的内容[id=null,name=bucket,description=red bucket,parent=null,children=null]Hibernate:insert-into-Product(description,name,parent\u-Product\u-id)值(?,,,?)@PedroGrandi现在看来我们解决了json反序列化问题,这在标题中有说明。所以你应该接受这个答案:)
@Path("/product/update/{id}")
@Consumes("application/json")
@Path("/image/update/{id}")
@Consumes("application/json")
@DELETE
@Path("/product/delete/{id}")
@DELETE
@Path("/image/delete/{id}")
@Entity
@Table
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer productId;
@Column(name = "NAME")
private String name;
@Column(name = "DESCRIPTION")
private String description;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="PRODUCT_ID")
private List<Image> images;
@OneToMany(cascade=CascadeType.ALL, mappedBy="parent")
private List<Product> children;
@ManyToOne
@JoinColumn(name = "PARENT_PRODUCT_ID")
private Product parent;
@Entity
@Table
public class Image implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer imageId;
@Column(name = "TYPE")
private String type;
@ManyToOne
@JoinColumn(name = "PRODUCT_ID", nullable = false)
private Product product;