簡體   English   中英

使用列表屬性將JSON反序列化為Object

[英]Deserializing JSON into Object with list attribute

我有兩個對象,具有OneToMany自我引用的Product和與Image的OneToMany關系。

從Rest API,我需要創建CRUD服務。 我創建了以下服務:

添加新產品:{“名稱”:“椅子”,“描述”:“紅色椅子”}

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

添加新的子產品:{“名稱”:“表”,“描述”:“紅色表”}

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

將圖像添加到產品:

/產品/ 1 /圖像/添加

{ “類型”: “PNG”}

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

更新產品:

/產品/更新/ 1

{“名稱”:“椅子”,“描述”:“藍色椅子”}

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

更新圖片:

/圖像/更新/ 1

{ “類型”: “JPEG”}

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

刪除產品:

/產品/刪除/ 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;   

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;

當我嘗試添加帶有圖片的產品時,出現錯誤:

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

無法在[來源:org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@3c9786ad;中從START_OBJECT令牌中反序列化java.util.ArrayList實例。 第2行,第27列](通過參考鏈:br.com.model.Product [“ images”])

需要幫助:

  1. 使用一個JSON添加帶有圖片的產品;
  2. 添加子產品的方式是否正確(使用PathParam)?

您在json字符串中的images屬性不是數組/列表,而是一個對象。 也應使用[]封裝它,不僅要用{}封裝。 這就是反序列化失敗的原因。

將 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> 反序列化以對象ID作為對象名稱的JSON對象列表 反序列化JSON對象 使用列表反序列化JSON包裝器對象將返回null屬性 列表<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> 使用LocalDateTime字段將JSON反序列化為對象 用傑克遜反序列化嵌套的json對象 將多態 Json object 反序列化為 POJO 基於對象類型反序列化JSON 將JSON反序列化為Java對象時,如何將父屬性映射到子對象?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM