You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POJO序列化JSON时如何将驼峰命名的key转换为蛇形命名?

问题根因

你当前标注的@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)仅作用于TimeSeries类的内部字段,无法生效于上层Supply类的timeSeries成员属性,因此该字段序列化后仍然保留小驼峰命名。

可行解决方案(仅需修改测试文件,无需改动原POJO)

方案1:修改测试使用的ObjectMapper全局命名策略

直接为你测试代码里用到的ObjectMapper实例配置全局蛇形命名规则,所有字段序列化时都会自动转蛇形:

// 仅在测试代码里新增这一行配置即可
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

String jsonDataResponse = mapper.writeValueAsString(dataResponse);
stubFor(WireMock.get(urlEqualTo("/someUrl"))
    .willReturn(aResponse()
       .withBody(jsonDataResponse)));

如果担心全局配置影响其他测试逻辑,可以在当前测试块单独实例化一个专属的ObjectMapper使用即可。

方案2:直接使用WireMock的JSON DSL构造响应体

跳过POJO序列化步骤,直接按预期格式构造JSON,更灵活适配桩化场景的定制需求:

stubFor(WireMock.get(urlEqualTo("/someUrl"))
    .willReturn(aResponse()
        .withHeader("Content-Type", "application/json")
        .withBody(JsonBody.json(
            Map.of(
                "supply", Map.of(
                    "time_series", List.of(
                        Map.of("date", "2021-11-16")
                    )
                )
            )
        ))));

方案3:序列化后手动替换键名(临时应急用)

如果不想改动Mapper配置也不想重构构造逻辑,可以对序列化后的字符串做一次替换:

String jsonDataResponse = mapper.writeValueAsString(dataResponse)
    .replace("\"timeSeries\"", "\"time_series\"");

该方案仅适合当前场景只有一处timeSeries键需要修改的情况,避免误替换其他内容。

内容的提问来源于stack exchange,提问作者Ulukbek Abylbekov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:45:04