• Json转bean-【下划线和陀螺峰格式互转】


    首先大家看到这个标题肯定觉得就这?很多api随随便便都可以至于还需要写博客吗,但是我这边要说的和你看的并不一样哟,还请耐心……

    背景

    我们项目要和第三方平台进行对接,交互的数据格式都是由大json进行传输的,并且json内容的字段属性名都是下划线命名的,而我们的java bean对象肯定是陀螺峰格式的 ,如果不进行处理肯定是映射不上的
    那么我们首先想到的肯定是的目前市面上号称工具王的Hutool
    的确可以解决了:

    String camelCaseData = StrUtil.toCamelCase(businessData)
    VehicleVersionStrategyInfoDTO versionStrategyInfoDTO = JSONUtil.toBean(camelCaseData, VehicleVersionStrategyInfoDTO.class)
    首先第一行代码将下划线转换为陀螺峰,然后再由json转bean,搞定!

    缺点

    但是这样有个问题就是:这个工具会把里面所有的下划线都转陀螺峰,包括你的value值,不仅仅如此,如果你的value值是大写的,会自动转小写,虽然我们的mysql sql语句查询不区分大小写都可以,但是会影响页面的回显数据体验

    解决

    我们要求只能将key进行转换 ,value值保持不变

    import com.fasterxml.jackson.annotation.JsonAutoDetect;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.PropertyAccessor;
    import com.fasterxml.jackson.core.JsonFactory;
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.*;
    import lombok.extern.slf4j.Slf4j;
    
    import java.io.IOException;
    import java.io.StringWriter;
    import java.lang.reflect.Type;
    import java.util.Collection;
    
    /**
     * @date 2022-02-24 15:38
     */
    @Slf4j
    public class JacksonUtil {
        private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    
        private static final ObjectMapper OBJECT_MAPPER_WITH_SNAKE = new ObjectMapper();
    
        private static final ObjectMapper OBJECT_MAPPER_WITH_SNAKE_AND_NO_NULL = new ObjectMapper();
    
        private static final ObjectMapper OBJECT_MAPPER_NO_NULL = new ObjectMapper();
    
        static {
            OBJECT_MAPPER.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
            // 是否将允许使用非双引号属性名字,默认为 false,由于 json 标准中使用双引号做属性名,建议不打开
            /*objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);*/
            // 无效的映射字段不会抛出异常
            OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            OBJECT_MAPPER.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    
            OBJECT_MAPPER_WITH_SNAKE.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
            // 是否将允许使用非双引号属性名字,默认
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    离线电商数仓(一)
    Vu3.x如何给v-for循环出来的输入框绑定v-mode的值,以及实现父子组件传值、双向绑定
    微信小程序| 做一款多人实时线上的五指棋联机游戏
    Java开发者的Python快速进修指南:掌握T检验
    Unity安装笔记
    Python UI自动化 —— 关键字+excel表格数据驱动
    如何通过在线培训考试系统进行远程教育
    使用 Windows Core Audio APIs 进行 Loopback Recording 并生成 WAV 文件
    Ubuntu安装Protobuf,指定版本
    openwrt-编译模块-tc、nginx
  • 原文地址:https://blog.csdn.net/lucky_love816/article/details/128185694