gpt4 book ai didi

spring - 在Spring MVC中将类反序列化为JSON时更改属性名称

转载 作者:行者123 更新时间:2023-12-04 23:20:22 25 4
gpt4 key购买 nike

我正在尝试使用Spring来消耗rest API调用,如下所示:

HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic " + base64Creds);

HttpEntity<String> request = new HttpEntity<String>(headers);
RestTemplate restTemplate = new RestTemplate();

Item item = restTemplate.exchange(url, HttpMethod.GET, request, Item.class).getBody();

我从API获得的响应格式如下:
{    
"item":[{
"itemname": "abc",
"qty":...
}]
}

Item类具有以下字段:
Class Item{
@JsonProperty("itemname")
String name;
@JsonProperty("qty")
int quantity;

// Getter / setter methods
}

我已将JsonProperty批注添加到字段中,因为它们的名称与从API获得的json不同。这样,我就可以成功反序列化api响应。

但是,当我尝试再次将Item类序列化为json时,字段名称为“itemname”和“qty”。有什么办法可以将它们保留为“名称”和“数量”,并且仍然能够映射到API响应?

提前致谢。

最佳答案

  • 如果您只想以其他形式进行序列化,则可以这样进行:
    public static class Item {

    private String name;
    private int quantity;

    @JsonProperty("name")
    public String getName() {
    return name;
    }

    @JsonProperty("itemname")
    public void setName(String name) {
    this.name = name;
    }

    @JsonProperty("quantity")
    public int getQuantity() {
    return quantity;
    }

    @JsonProperty("qty")
    public void setQuantity(int quantity) {
    this.quantity = quantity;
    }

    }

    这将读取"{"itemname": "abc", "qty":10 }"并写入"{"name": "abc", "quantity":10 }"

    但是有一个很大的缺点-您将无法使用"{"name": "abc", "quantity":10 }"读取ObjectMapper(这是更糟糕的解决方案)。
  • 您可以使用2 ObjectMappers,并且可以使用Mixins代替类批注来配置特定的反序列化

    这就是您的Mixin的样子:
    abstract public static class ItemMixin {
    ItemMixin(@JsonProperty("itemname") String itemname, @JsonProperty("qty") int qty) { }
    // note: could alternatively annotate fields "w" and "h" as well -- if so, would need to @JsonIgnore getters
    @JsonProperty("itemname") abstract String getName(); // rename property
    @JsonProperty("qty") abstract int getQuantity(); // rename property
    }

    这是在ObjectMapper中添加Mixin的方法。
    objectMapper.addMixIn(Item.class, ItemMixinA.class);

    因此,如果使用Mixin ObjectMapper反序列化并使用标准ObjectMapper进行序列化将没有问题。
  • 您可以为您的类(class)编写自定义JsonDeserialization

    对于没有几个字段的类来说,这样做很容易,但是随着字段数量的增加,复杂度也会成比例地增加。
  • 关于spring - 在Spring MVC中将类反序列化为JSON时更改属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28735463/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com