[英]Webclient + Jackson: how to setup deserialization to convert snake_case into 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.