亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

映射到 POJO 的 ObjectMapper 返回 Null

映射到 POJO 的 ObjectMapper 返回 Null

江戶川亂折騰 2022-10-12 10:52:20
我有一個以下形式的簡單 Json:{  "products": [    {      "id": 1,      "productSku": "123",      "productInventory": "24"    },    {      "id": 2,      "productSku": "12350",      "productInventory": "22"    },    {      "id": 3,      "productSku": "12351",      "productInventory": "19"    }  ]}我正在通過 localhost URL 獲取此 Json,并嘗試將其映射到在不同端口上運行的不同 Spring Boot 應用程序中的 POJO 類。上述Json對應的POJO類為:@JsonIgnoreProperties(ignoreUnknown = true)@JsonRootName(value = "products")public class Product {    private Integer id;    private String productSku;    private String productInventory;    //getters and setters omitted}以下是我處理映射和綁定的控制器:@ResponseBody    @GetMapping("index")    public String getIndex() throws JsonParseException,        JsonMappingException, IOException {        URL ApiUrlJson = new URL("http://localhost:1990/product");        ObjectMapper mapper = new ObjectMapper();        Product product = mapper.readValue(ApiUrlJson, Product.class);        System.out.println(product.getProductInventory());        return "Processed!";    }當我運行應用程序并訪問索引以獲取某個變量的值時,輸出始終為空,我不確定我缺少什么?
查看完整描述

3 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

您的 JSON 文件中有一個產品列表。您正在反序列化一個具有 3 個字段的對象。這些字段都不是在產品下,但您忽略了缺少的字段。

嘗試反序列化為包含 Product 列表的新類。刪除 @JsonRootName


查看完整回答
反對 回復 2022-10-12
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

您正在嘗試反序列化 JSON 數組。也不要省略 setter,因為這個變量的訪問是私有的。你可以參考下面的代碼。我已經檢查過了,我能夠正確地反序列化它。


@JsonIgnoreProperties(ignoreUnknown = true)

class Product {


  private Integer id;

  private String productSku;

  private String productInventory;


  public Integer getId() {

    return id;

  }


  public void setId(Integer id) {

    this.id = id;

  }


  public String getProductSku() {

    return productSku;

  }


  public void setProductSku(String productSku) {

    this.productSku = productSku;

  }


  public String getProductInventory() {

    return productInventory;

  }


  public void setProductInventory(String productInventory) {

    this.productInventory = productInventory;

  }

}


class Products{


  private List<Product> products;


  public List<Product> getProducts() {

    return products;

  }


  public void setProducts(List<Product> products) {

    this.products = products;

  }

}


public class Main{


  public static void main(String[] args) throws Exception{

    String jsonString =

        "{\n"

            + "  \"products\": [\n"

            + "    {\n"

            + "      \"id\": 1,\n"

            + "      \"productSku\": \"123\",\n"

            + "      \"productInventory\": \"24\"\n"

            + "    },\n"

            + "    {\n"

            + "      \"id\": 2,\n"

            + "      \"productSku\": \"12350\",\n"

            + "      \"productInventory\": \"22\"\n"

            + "    },\n"

            + "    {\n"

            + "      \"id\": 3,\n"

            + "      \"productSku\": \"12351\",\n"

            + "      \"productInventory\": \"19\"\n"

            + "    }\n"

            + "  ]\n"

            + "}";


    ObjectMapper mapper = new ObjectMapper();

    Products products = mapper.readValue(jsonString, Products.class);

    // To just access list of ids

    List<Product> productsList= products.getProducts();

    List<Integer> productIds = new ArrayList<>();

    for(Product product : productsList){

      productIds.add(product.getId());

    }

    System.out.println(productIds);

    }

}


查看完整回答
反對 回復 2022-10-12
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

您有一個對象,該對象內部是一個對象列表。IE


@JsonIgnoreProperties(ignoreUnknown = true)

@JsonRootName(value = "products")

public class Products {

    private List<Product> products;


    public List<Product> getProducts() {

        return products;

    }


    public void setProducts(final List<Product> products) {

        this.products = products;

    }

}



public class Product{

.....

}


ObjectMapper objectMapper = new ObjectMapper();

Products product = objectMapper.readValue("json here....", Products.class);

System.out.println(product.getProducts().size());


查看完整回答
反對 回復 2022-10-12
  • 3 回答
  • 0 關注
  • 396 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號