簡體   English   中英

Jackson / Spring Boot - 將 snake_case model 序列化為 camelCase

[英]Jackson / Spring Boot - serialize a snake_case model to camelCase

我正在使用我的 REST API(駝峰命名法)來調用第 3 方 graphQL API,它返回 snake_case 中的對象。 為此,我使用一個庫來生成映射器和 model 文件 ( graphql-java-codegen )。 結果,我最終得到了看起來像的模型

class MyModel {
  public my_string;
  //...
}

我不能強制 model 生成以駝峰命名法完成。 我想直接將生成的模型作為 ResponseObjects 返回給我的客戶端,但希望序列化以駝峰式命名,而不需要使用駝峰式字段復制生成的 model。 所以當返回示例時,它看起來像

{
  "myString": "Example str"
}

在我的代碼生成配置中,我能夠在 class 和字段級別添加注釋(但無法在每個字段自定義它,所以沒有@JsonProperty("myString" ))

tl;dr:是否有一些注釋/Spring 引導配置我可以用來強制使用 snake_case 命名的模型序列化為 camelCase,而無需為每個字段指定@JsonProperty

您可以創建一個自定義的PropertyNamingStrategy子類,並將其設置為一個僅用於序列化的ObjectMapper映射器的默認命名策略(您可以檢查是否將字符串從 snake_case 轉換為 camelcase):

public class SnakeCaseToCamelCase extends PropertyNamingStrategy {

    @Override
    public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
        return Pattern.compile("_([a-z])")
                      .matcher(defaultName)
                      .replaceAll(m -> m.group(1).toUpperCase());
    }
}

public class MyModel {
    public String my_string = "Example str";
}

MyModel model = new MyModel();
mapper.setPropertyNamingStrategy(new SnakeCaseToCamelCase());
//it prints {"myString":"Example str"}
System.out.println(mapper.writeValueAsString(model));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM