gpt4 book ai didi

java - 使用构建器时映射到蛇盒

转载 作者:行者123 更新时间:2023-12-04 13:07:06 29 4
gpt4 key购买 nike

我正在从休息调用接收 json 数据。 key 都在camel case .
我能够从 rest 调用中很好地获得这些数据。但我希望将所有这些 key 转换为 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,这会起作用并坚持使用 getterssetters而不是 builder .
例如,如果我的 bean 以以下格式声明,这将起作用并给我蛇案例。
@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Layout {
private final String myBanner;
}
如果我使用构建器但不使用 @JsonProperty,它将不起作用(不会从 rest 调用中捕获数据)如下。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {
private final String myBanner;
}
这就是我现在所拥有的,但在 Camel 情况下。我要蛇盒。
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonDeserialize(builder = Layout.LayoutBuilder.class)
public class Layout {

@JsonProperty("myBanner")
private final String myBanner;
}
我想坚持使用 builder .因此问题是,有没有办法解决这个问题来使用构建器并仍然获得 snake case 中的值?
对于我的回应。
或者,一种递归循环对象(包括嵌套对象)中的所有字段并将它们全部切换为蛇形 shell 的方法?
来自休息调用的 Json 数据
{
"mainData": {
"groupData": "",
"benefits": {
"summary": {
"title": "",
"shortCopy": ""
}
},
"simpleLayout": {
"myBanner": "summary",
"titles": [
[
"",
""
]
]
},
"maxLayout": {
"myBanner": "summary",
"titles": [
[
""
]
]
}
}
}
无法获取翻译方法的截图。
enter image description here
enter image description here

最佳答案

您可以使用 @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;
}
}
上面的类可以反序列化以下 JSON,
{   
"myBanner": "My own banner.."
}
并序列化为以下 JSON
{
"my_banner": "My own banner.."
}

关于java - 使用构建器时映射到蛇盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68896370/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com