如何在不同的API中为同一字段使用不同的名称?-Jackson

5sxhfpxr  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个API,它的响应如下:

{
  ruleId:”123”,
  ruleName:”Rule1”
}

现在,我将介绍一个新的API,它确实包含这些字段,但响应不应包含名称ruleId、ruleName,而应包含id、name:

{
  id:”123”,
  name:”Rule1”
}

我应该以这样一种方式进行更改,以便之前的Api响应不会受到影响。本想使用JsonProperty /JsonGetter,但它也会更改之前的Api响应。
有没有什么方法可以让我在同一个字段中使用两个getter,然后用一个getter来处理之前的API,用另一个getter来处理我的目的?(我只关心在将Pojo转换为JSON时)
有人能帮忙吗?

brjng4g3

brjng4g31#

由于您希望在不同的情况下以不同的方式序列化对象,因此最好使用jackson mix-in
下面是一个例子
如果你的pojo看起来像这样:

public class CustomPojo {

    private String ruleId;

    private String ruleName;

    public String getRuleId() {
        return ruleId;
    }

    public void setRuleId(String ruleId) {
        this.ruleId = ruleId;
    }

    public String getRuleName() {
        return ruleName;
    }

    public void setRuleName(String ruleName) {
        this.ruleName = ruleName;
    }
}

首先,您需要创建一个接口(或类),如下所示:

import com.fasterxml.jackson.annotation.JsonProperty;

public interface CostomPojoMixin {

    @JsonProperty("Id")
    String getRuleId();

    @JsonProperty("name")
    String getRuleName();
}

此接口将用于在序列化期间重命名字段ruleIdruleName
完成所有这些设置后,您可以编写控制器方法并自定义ObjectMapper:

@GetMapping(value = "/test/mixin")
        public String testMixin() throwsJsonProcessingException {
            CostomPojo cp = new CostomPojo();
            cp.setRuleId("rule");
            cp.setRuleName("name");
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.addMixIn(CustomPojo.class, CostomPojoMixin.class);
            String json = objectMapper.writeValueAsString(cp);
            return json;
    
        }

此端点应返回如下响应:

{"Id":"rule","name":"name"}

相关问题