为了账号安全,请及时绑定邮箱和手机立即绑定

映射到 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 关注
  • 479 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号