【发布时间】:2021-10-24 00:38:15
【问题描述】:
我正在接收来自休息呼叫的 json 数据。密钥都在camel case。
我可以从 rest 调用中很好地获取这些数据。但我希望将所有这些密钥转换为 snake case 因为那是
我发回给需要我回复的客户的版本。
在我的配置中,我有以下映射蛇的情况。
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES));
return converter;
}
如果我不明确使用@JsonProperty 并且坚持使用getters 和setters 而不是builder,则此方法有效。
例如,如果我的 bean 以以下格式声明,这将有效并给我蛇盒。
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Layout {
private final String myBanner;
}
如果我使用构建器但不使用@JsonProperty,它将无法工作(不会从休息调用中捕获数据),如下所示。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {
private final String myBanner;
}
这就是我现在所拥有的,但它是骆驼式的。我要蛇皮盒。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {
@JsonProperty("myBanner")
private final String myBanner;
}
我想坚持使用builder。因此问题是,有没有办法使用构建器并仍然获得snake case 中的值
我的回应。
或者,一种递归循环对象中所有字段的方法,包括嵌套对象,并将它们全部切换为蛇形?
来自rest调用的Json数据
{
"mainData": {
"groupData": "",
"benefits": {
"summary": {
"title": "",
"shortCopy": ""
}
},
"simpleLayout": {
"myBanner": "summary",
"titles": [
[
"",
""
]
]
},
"maxLayout": {
"myBanner": "summary",
"titles": [
[
""
]
]
}
}
}
【问题讨论】: