[英]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.