【问题标题】:@JsonPropertyOrder names independent of property naming strategy@JsonPropertyOrder 名称独立于属性命名策略
【发布时间】:2021-06-18 20:30:30
【问题描述】:

我们有这样的模型:

@JsonPropertyOrder({
        "id",
        "alpha2_code",
        "alpha3_code",
        "name"
})
@Getter
@Setter
public class Country {

    private Long id;
    private String alpha2Code;
    private String alpha3Code;
    private String name;
}

还有一个ObjectMapper 实例,例如:

var jsonMapper = new ObjectMapper();
jsonMapper.enable(SerializationFeature.INDENT_OUTPUT);
jsonMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
jsonMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
jsonMapper.registerModule(new JavaTimeModule());

创建以下 JSON:

{
  "id": 1,
  "alpha2_code": "NL",
  "alpha3_code": "NLD",
  "name": "Netherlands",
}

这一切都按预期工作。

值得一提的是,我们使用@JsonPropertyOrder 对输出进行排序。 此注释要求字段名称与它们在输出中的样子一样;因此 SNAKE CASE 像 "alpha2_code"not "alpha2Code" 作为 Java 属性名称。

现在我们需要创建 YAML 作为输出(基于相同的模型)。 但是 YAML 输出的命名约定必须是 KEBAB CASE。

有没有聪明的方法来解决这个问题?

我的想法是将 @JsonPropertyOrder 移动到 mix-ins 并引入 CountrySnakeMixinCountryKebabMixin 混合类并在单独的对象映射器中使用它们。

对于这个简单的示例,它看起来很简单,但对于 50 - 100 个类的模型,这将成为维护的噩梦。

【问题讨论】:

    标签: java serialization jackson jackson-databind jackson2


    【解决方案1】:

    我测试过

    此注释要求字段名称与它们在 输出

    不正确:

    @JsonPropertyOrder({
        "id",
        "alpha2Code",
        "alpha3Code",
        "name"
    })
    

    按预期工作,同时在蛇和烤肉串的情况下改变顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多