簡體   English   中英

如何在Spring控制器中讀取JSON數組值

[英]How to read JSON array values in Spring controller

我想迭代產品並獲取名稱,代碼和價格的列表,並在我的Model類中進行設置。 任何幫助將不勝感激-我該如何迭代。 當我使用obj.get(“ Products”)-它只是打印為字符串時-被卡住了。

{
    "id": "skd3303ll333",
    "Products": [{
            "name": "apple",
            "code": "iphone-393",
            "price": "1939"

        },
        {
            "name": "ipad",
            "code": "ipad-3939",
            "price": "900"

        }
    ]
}


@PostMapping(path="/create", consumes=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> create(@RequestBody  Map<String, Object> obj ) { 
System.out.println("Products :" + obj.get("Products"));
  }

有兩種方法可以做到這一點,

1)通過類型轉換(個人而言,我不希望這樣)

List<Map<Object,Object>> productslist = (List<Map<Object, Object>>) obj.get("products");
    for(Map entry: productslist) {
        for(Object s: entry.keySet()) {
            System.out.println(s.toString());
            System.out.println(entry.get(s).toString());

        }
    }

2)直接映射到Model類,對於這種方法,您需要在buildpath中使用Jackson庫

@JsonIgnoreProperties(unknown =true)
public class Customer {

@JsonProperty("id")
private String id;
@JsonProperty("products")
private List<Products> products;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public List<Products> getProducts() {
    return products;
}

public void setProducts(List<Products> products) {
    this.products = products;
   }

}
 @JsonIgnoreProperties(unknown =true)
 class Products{
@JsonProperty("name")
private String name;
@JsonProperty("code")
private String code;
@JsonProperty("price")
private String price;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
   }

}

調節器

public ResponseEntity<Object> create(@RequestBody  Customer obj ) {

您正在嘗試使用Map<String, Object> obj處理json,這可以通過某種方式實現,但是大多數情況下,您要定義一個或多個POJO類。 這些代表json。

public class IdWrapper {
    private String id;
    @JsonProperty("Products")
    private List<Product> products;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public List<Product> getProducts() {
        return products;
    }
}

public class Product {
    private String name;
    private String code;
    private String price;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

在您的控制器中,如下所示:

@RestController
@RequestMapping("test")
public class DemoController {
    @PostMapping()
    public void test(@RequestBody IdWrapper productsWrapper) {
        System.out.println();
    }
}

您需要具有兩個類的POJO結構:

public class Product {
    private String name;
    private String code;
    private int price;
}

public class ProductsGroup {
    private long id;
    private List<Product> products;
    // getters/setters
}

並將您的方法簽名更改為:

@PostMapping(path="/create", consumes=MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ProductsGroup> create(@RequestBody ProductsGroup productGroup) 
{ 
   System.out.println("Products :" + productGroup.getProducts());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM