Fll*_*ppy 6 java jackson lombok
我正在从休息调用接收 json 数据。钥匙都在里面camel case。
我可以从其余调用中很好地获取这些数据。但我希望将所有这些密钥转换为snake casecos,这是
我发送回需要我的响应的客户端的版本。
在我的配置中,我有以下内容来映射蛇案例。
@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;
}
Run Code Online (Sandbox Code Playgroud)
如果我不明确使用@JsonProperty并且坚持使用gettersandsetters而不是builder.
例如,如果我的 bean 以以下格式声明,这将起作用并给我蛇形案例。
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Layout {
private final String myBanner;
}
Run Code Online (Sandbox Code Playgroud)
@JsonProperty如果我使用构建器但不按如下方式使用,它将无法工作(不会从其余调用中捕获数据) 。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {
private final String myBanner;
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在拥有的,可以使用,但是是在骆驼箱中。我想要蛇盒。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {
@JsonProperty("myBanner")
private final String myBanner;
}
Run Code Online (Sandbox Code Playgroud)
我想坚持使用builder. 因此问题是,有没有办法解决这个问题,使用构建器并仍然获取snake case
我的响应值。
或者另一种方法是递归循环对象中的所有字段(包括嵌套对象)并将它们全部切换为蛇形外壳?
来自 REST 调用的 Json 数据
{
"mainData": {
"groupData": "",
"benefits": {
"summary": {
"title": "",
"shortCopy": ""
}
},
"simpleLayout": {
"myBanner": "summary",
"titles": [
[
"",
""
]
]
},
"maxLayout": {
"myBanner": "summary",
"titles": [
[
""
]
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)注释。
也与Lombok 项目合作。
例如,
@Getter
@Builder
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class YourDto {
private final String myBanner;
public YourDto(@JsonProperty("myBanner")
@JsonAlias("my_banner") String myBanner) {
this.myBanner = myBanner;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的类可以反序列化以下 JSON,
{
"myBanner": "My own banner.."
}
Run Code Online (Sandbox Code Playgroud)
并序列化为以下 JSON
{
"my_banner": "My own banner.."
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3731 次 |
| 最近记录: |