jackson map转对象

Jackson已经满足了大部分的序列化和反序列化工作,但是对于复杂的泛型实体估计未必能如愿的正常反序列,而此时对于一些泛型里面的实体对象就会反序列化成LinkedHashMap类型的

 

        Map<String,String> map = new LinkedHashMap<>();
        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.convertValue(map, User.class);

 

### 使用 Jackson 将 Java `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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值