jackson定义返回属性从下划线改成驼峰命令

在Spring Boot应用中,Jackson的配置是用来控制如何序列化和反序列化JSON数据。从你提供的配置看,问题出现在property-naming-strategy的设置上。

jackson:
  property-naming-strategy: SNAKE_CASE

这个配置指示Jackson在序列化和反序列化时,将所有Java属性名从驼峰命名法(Camel Case)转换为下划线命名法(Snake Case)。因此,如果你有一个Java属性名为userName,在JSON中它会被表示为user_name

如果你希望属性名保持为驼峰命名法不变,你应该移除或更改property-naming-strategy的配置。移除这个配置项或将其设置为LOWER_CAMEL_CASE(这实际上是默认值,表示驼峰命名法)将保持属性名的驼峰式表示,例如:

jackson:
  property-naming-strategy: LOWER_CAMEL_CASE

或者,为了保持属性名的默认行为(即不改变属性名),你可以直接从你的配置文件中移除property-naming-strategy行:

jackson:
  serialization:
    WRITE_DATES_AS_TIMESTAMPS: false
    INDENT_OUTPUT: true
  deserialization:
    FAIL_ON_UNKNOWN_PROPERTIES: false
  default-property-inclusion: non_null

这样,Jackson在序列化和反序列化时将不会改变属性名的命名风格,保持你在Java中定义的驼峰命名法。确保在做出这些更改后重新启动你的应用,以便新的配置生效。

### 使用 JacksonJava `Map` 的下划线键名换为驼峰命名 为了将 `Map<String, Object>` 中的键从下划线风格换成驼峰风格,在处理 JSON 序列化和反序列化的场景中可以利用 Jackson 提供的功能。Jackson 是一个强大的库,用于处理 JSON 和其他数据格式之间的换。 #### 方法一:自定义模块配置 通过创建并注册一个新的模块到 ObjectMapper 实例来改变默认行为是一个有效的方法。该方法允许开发者指定如何映射属性名称: ```java ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Module() { @Override public String getModuleName() { return "CustomNaming"; } @Override public Version version() { return Version.unknownVersion(); } @Override public void setupModule(SetupContext context) { context.setMixInAnnotations(Map.class, CustomMixin.class); } }); // 定义 Mixin 类以应用特定命名策略 abstract class CustomMixin { @JsonSerialize(keyUsing = PropertyNamingStrategy.UpperCamelCaseStrategy.class) abstract Map<?, ?> mapWithUpperCamelKeys(); } ``` 这种方法适用于全局设置对象映射器的行为[^1]。 #### 方法二:使用 `PropertyNamingStrategy` 更简单的方式是在构建 `ObjectMapper` 时直接设定其使用的命名策略。对于希望仅影响读取操作而不更改写入方式的情况特别有用: ```java ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); String jsonString = "{\"first_name\":\"John\", \"last_name\": \"Doe\"}"; TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {}; HashMap<String, Object> result = objectMapper.readValue(jsonString, typeRef); System.out.println(result); // 输出: {firstName=John, lastName=Doe} // 如果需要保持原有输入不变,则可以在输出前再次修改命名规则 objectMapper.setPropertyNamingStrategy(null); String camelCasedOutput = objectMapper.writeValueAsString(result); System.out.println(camelCasedOutput); // 输出 {"firstName":"John","lastName":"Doe"} ``` 这段代码展示了如何先将来自外部源(如 API 响应)的数据按照蛇形命名法解析为内部表示形式;之后如果要发送回客户端或其他服务端点之前再将其换回去[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值