简体   繁体   English

使用列表属性将JSON反序列化为Object

[英]Deserializing JSON into Object with list attribute

I have two objects, Product with OneToMany self reference and OneToMany relationship to Image. 我有两个对象,具有OneToMany自我引用的Product和与Image的OneToMany关系。

From a Rest API, I need to create CRUD services. 从Rest API,我需要创建CRUD服务。 I created the following services: 我创建了以下服务:

Add new Product: {"name":"chair", "description":"red chair"} 添加新产品:{“名称”:“椅子”,“描述”:“红色椅子”}

@Path("/product/add")
@Consumes("application/json")

Add new Child Product: {"name":"table", "description":"red table"} 添加新的子产品:{“名称”:“表”,“描述”:“红色表”}

@Path("/product/{id}/addChild")
@Consumes("application/json")

Add Image to Product: 将图像添加到产品:

/product/1/image/add /产品/ 1 /图像/添加

{"type":"PNG"} { “类型”: “PNG”}

@Path("/product/{id}/image/add")
@Consumes("application/json")

Update Product: 更新产品:

/product/update/1 /产品/更新/ 1

{"name":"chair", "description":"blue chair"} {“名称”:“椅子”,“描述”:“蓝色椅子”}

@Path("/product/update/{id}")
@Consumes("application/json")

Update Image: 更新图片:

/image/update/1 /图像/更新/ 1

{"type":"JPEG"} { “类型”: “JPEG”}

@Path("/image/update/{id}")
@Consumes("application/json")

Delete Product: 删除产品:

/product/delete/1 /产品/删除/ 1

@DELETE
@Path("/product/delete/{id}")

Delete Image: 删除图片:

/image/delete/1 /图像/删除/ 1

@DELETE
@Path("/image/delete/{id}")

Product.java: 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;   

Image.java: Image.java:

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

When I try to add a Product with a Image, I got an error: 当我尝试添加带有图片的产品时,出现错误:

{"name":"bucket", "description":"red bucket", "images":{"type":"jpeg"} } {“ name”:“ bucket”,“ description”:“ red bucket”,“ images”:{“ type”:“ jpeg”}}

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@3c9786ad; 无法在[来源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@3c9786ad;中从START_OBJECT令牌中反序列化java.util.ArrayList实例。 line: 2, column: 27] (through reference chain: br.com.model.Product["images"]) 第2行,第27列](通过参考链:br.com.model.Product [“ images”])

Need help to: 需要帮助:

  1. Add with one JSON a Product with Images; 使用一个JSON添加带有图片的产品;
  2. The way of adding child products is correct (using PathParam)? 添加子产品的方式是否正确(使用PathParam)?

Your images property in json string is not an array/list, it is an object. 您在json字符串中的images属性不是数组/列表,而是一个对象。 It should also be encapsulated with [] to be so, not only with {} . 也应使用[]封装它,不仅要用{}封装。 That's why the deserialization fails. 这就是反序列化失败的原因。

将 json 反序列化为列表<object><div id="text_translate"><p>我有 json:</p><pre> "taxLevels": [{ "code": "VAT", "percentage": 19.0 } ]</pre><p> 这确实是List&lt;TTaxLevel&gt;</p><p> 我有<strong>Model.class</strong> :</p><pre> public class Model{ private final List&lt;TTaxLevel&gt; taxLevels; }</pre><p> 和<strong>TtaxLevel.class</strong> :</p><pre> @NoArgsConstructor public class TTaxLevel { private String code; private Double percentage; }</pre><p> 但我在这里收到错误:</p><blockquote><p> [Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token at [Source: (PushbackInputStream); 行:36,列:19](通过参考链:...Model["taxLevels"])]]</p></blockquote><p> 我可以以某种方式强制jackson在这里ArrayList而不是Map吗? 这是一个问题。</p><p> 这是反序列化代码:</p><pre> Model model = new ObjectMapper().readValue(content, Model.class);</pre></div></object> - Deserializing json as List<Object>

列表<object> null 在 Spring 启动 Z594C103F2C6E04C3D8AB059F031E0C1 中反序列化 json 时<div id="text_translate"><p>我在 Spring 引导应用程序中遇到了 controller 问题。 当我在 controller(URI/调用)上进行调用时,object 列表始终是 null。</p><pre> { "code": "TEST", "name": "TEST NAME", "groupe": "A1", "list": [ {"type":"web", "link":"https://google.com/"}, {"type":"web", "link":"https://google2.com/"} ] }</pre><pre class="lang-java prettyprint-override"> @PostMapping(value="/call") public ResponseEntity&lt;Void&gt; ajouterEnvironnement(@RequestBody First first) { first.getCode() // value: "TEST" first.getList() // value: null }</pre><pre class="lang-java prettyprint-override"> public class First { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String code; private String name; private String groupe; @OneToMany(mappedBy = "first", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List&lt;Second&gt; list; }</pre><pre class="lang-java prettyprint-override"> public class Second { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String type; private String link; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "first_id", nullable = false) private First first; }</pre></div></object> - List<object> null when deserializing json in Spring Boot controller

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将 json 反序列化为列表<object><div id="text_translate"><p>我有 json:</p><pre> "taxLevels": [{ "code": "VAT", "percentage": 19.0 } ]</pre><p> 这确实是List&lt;TTaxLevel&gt;</p><p> 我有<strong>Model.class</strong> :</p><pre> public class Model{ private final List&lt;TTaxLevel&gt; taxLevels; }</pre><p> 和<strong>TtaxLevel.class</strong> :</p><pre> @NoArgsConstructor public class TTaxLevel { private String code; private Double percentage; }</pre><p> 但我在这里收到错误:</p><blockquote><p> [Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of java.util.LinkedHashMap&lt;java.lang.String,java.lang.String&gt; out of START_ARRAY token at [Source: (PushbackInputStream); 行:36,列:19](通过参考链:...Model["taxLevels"])]]</p></blockquote><p> 我可以以某种方式强制jackson在这里ArrayList而不是Map吗? 这是一个问题。</p><p> 这是反序列化代码:</p><pre> Model model = new ObjectMapper().readValue(content, Model.class);</pre></div></object> - Deserializing json as List<Object> 反序列化以对象ID作为对象名称的JSON对象列表 - Deserializing a list of JSON objects having object's ID as an object name 反序列化JSON对象 - Deserializing JSON object 使用列表反序列化JSON包装器对象将返回null属性 - Deserializing JSON wrapper object with list returns null properties 列表<object> null 在 Spring 启动 Z594C103F2C6E04C3D8AB059F031E0C1 中反序列化 json 时<div id="text_translate"><p>我在 Spring 引导应用程序中遇到了 controller 问题。 当我在 controller(URI/调用)上进行调用时,object 列表始终是 null。</p><pre> { "code": "TEST", "name": "TEST NAME", "groupe": "A1", "list": [ {"type":"web", "link":"https://google.com/"}, {"type":"web", "link":"https://google2.com/"} ] }</pre><pre class="lang-java prettyprint-override"> @PostMapping(value="/call") public ResponseEntity&lt;Void&gt; ajouterEnvironnement(@RequestBody First first) { first.getCode() // value: "TEST" first.getList() // value: null }</pre><pre class="lang-java prettyprint-override"> public class First { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String code; private String name; private String groupe; @OneToMany(mappedBy = "first", cascade = CascadeType.ALL, fetch = FetchType.EAGER) private List&lt;Second&gt; list; }</pre><pre class="lang-java prettyprint-override"> public class Second { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String type; private String link; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "first_id", nullable = false) private First first; }</pre></div></object> - List<object> null when deserializing json in Spring Boot controller 使用LocalDateTime字段将JSON反序列化为对象 - Deserializing JSON to Object with LocalDateTime field 用杰克逊反序列化嵌套的json对象 - Deserializing nested json object with Jackson 将多态 Json object 反序列化为 POJO - Deserializing a polymorphic Json object to a POJO 基于对象类型反序列化JSON - Deserializing JSON based on object type 将JSON反序列化为Java对象时,如何将父属性映射到子对象? - How to map a parent attribute to a child object when deserializing JSON into Java objects?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM