Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSON反序列化为具有列表属性的对象_Java_Json_Rest_Jersey_Jax Rs - Fatal编程技术网

Java 将JSON反序列化为具有列表属性的对象

Java 将JSON反序列化为具有列表属性的对象,java,json,rest,jersey,jax-rs,Java,Json,Rest,Jersey,Jax Rs,我有两个对象,一个是产品,一个是自我参照,一个是与形象的关系 从RESTAPI,我需要创建CRUD服务。我创建了以下服务: 添加新产品: {“姓名”:“主席”, “说明”:“红色椅子”} 添加新的子产品: {“名称”:“表格”, “说明”:“红色表格”} 将图像添加到产品: /产品/1/图片/添加 {“类型”:“PNG”} 更新产品: /产品/更新/1 {“姓名”:“主席”, “说明”:“蓝色椅子”} 更新图像: /图片/更新/1 {“类型”:“JPEG”} 删除产品: /产品/删除/1 @DE

我有两个对象,一个是产品,一个是自我参照,一个是与形象的关系

从RESTAPI,我需要创建CRUD服务。我创建了以下服务:

添加新产品: {“姓名”:“主席”, “说明”:“红色椅子”}

添加新的子产品: {“名称”:“表格”, “说明”:“红色表格”}

将图像添加到产品:

/产品/1/图片/添加

{“类型”:“PNG”}

更新产品:

/产品/更新/1

{“姓名”:“主席”, “说明”:“蓝色椅子”}

更新图像:

/图片/更新/1

{“类型”:“JPEG”}

删除产品:

/产品/删除/1

@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添加带有图像的产品
  • 添加子产品的方式是否正确(使用PathParam)

  • 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;