iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中的BaseTypeHandler自定义类型转换器的使用
  • 114
分享到

Java中的BaseTypeHandler自定义类型转换器的使用

2024-04-02 19:04:59 114人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录简述通用的类型转换器(存在一些问题)定制类型转换器简述 mysq5.7之后新增了JSON类型,但是在使用的过程中,json数组中的值小于Integer.MAX_VALUE,则反序

简述

mysq5.7之后新增了JSON类型,但是在使用的过程中,json数组中的值小于Integer.MAX_VALUE,则反序列化时会转成List类型,假设我们用的是List类型的话就会碰到类型转换错误的异常。

通用的类型转换器(存在一些问题)

此方法可以返回对象的calss,自动转成对应的类型,但是在碰到List 类型的时候,由于calss只能获取到java.util.List类型无法获取List里对象的类型,就会导致会使用fastJson的默认转换类型,也就是当Json数组中的值小于Integer.MAX_VALUE,则反序列化时会转成List类型。所以当碰到这种情况时,可以使用以下方法。

@MappedJdbcTypes(value = JdbcType.VARCHAR)
public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {
    private static ObjectMapper mapper = new ObjectMapper();
    private Class<T> clazz;
    public JsonTypeHandler(Class<T> clazz) {
        if (clazz == null) {
            throw new IllegalArgumentException("Type argument cannot be null");
        }
        this.clazz = clazz;
    }
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws sqlException {
        ps.setString(i, this.toJson(parameter));
    }
    @Override
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return this.toObject(rs.getString(columnName), clazz);
    }
    @Override
    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return this.toObject(rs.getString(columnIndex), clazz);
    }
    @Override
    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return this.toObject(cs.getString(columnIndex), clazz);
    }
    private String toJson(T object) {
        try {
            return mapper.writeValueAsString(object);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private T toObject(String content, Class<?> clazz) {
        if (content != null && !content.isEmpty()) {
            try {
                return (T) mapper.readValue(content, clazz);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            return null;
        }
    }
}

定制类型转换器

指定返回值只能是 List

@MappedJdbcTypes(value = JdbcType.VARCHAR)
@MappedTypes(List.class)
public class JsonListLongTypeHandler extends BaseTypeHandler<List<Long>> {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, List<Long> parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, JSON.toJSONString(parameter));
    }
    @Override
    public List<Long> getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return this.getLongs(rs.getString(columnName));
    }
    @Override
    public List<Long> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return this.getLongs(rs.getString(columnIndex));
    }
    @Override
    public List<Long> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return this.getLongs(cs.getString(columnIndex));
    }
    private List<Long> getLongs(String value) {
        if (StringUtils.hasText(value)) {
            try {
                CollectionType type = objectMapper.getTypeFactory().constructCollectionType(ArrayList.class, Long.class);
                Object o1 = objectMapper.readValue(value, type);                List<Long> o = objectMapper.readValue(value, type);
                return o;
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

到此这篇关于Java中的BaseTypeHandler自定义类型转换器的使用的文章就介绍到这了,更多相关BaseTypeHandler内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中的BaseTypeHandler自定义类型转换器的使用

本文链接: https://www.lsjlt.com/news/149371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的BaseTypeHandler自定义类型转换器的使用
    目录简述通用的类型转换器(存在一些问题)定制类型转换器简述 mysq5.7之后新增了json类型,但是在使用的过程中,Json数组中的值小于Integer.MAX_VALUE,则反序...
    99+
    2022-11-13
  • Java中的BaseTypeHandler自定义类型转换器如何使用
    这篇文章主要介绍“Java中的BaseTypeHandler自定义类型转换器如何使用”,在日常操作中,相信很多人在Java中的BaseTypeHandler自定义类型转换器如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-30
  • Spring中的类型转换器怎么定义使用
    这篇文章主要讲解了“Spring中的类型转换器怎么定义使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring中的类型转换器怎么定义使用”吧!1.类型转换器作用类型的转换赋值2.自定义...
    99+
    2023-07-04
  • 如何使用JPA自定义VO类型转换
    这篇文章主要介绍如何使用JPA自定义VO类型转换,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!JPA自定义VO类型转换(EntityUtils工具类)在JPA查询中,如果需要返回自定义的类,可以使用EntityUti...
    99+
    2023-06-25
  • 如何使用mybatis自定义日期类型转换器
    本篇内容主要讲解“如何使用mybatis自定义日期类型转换器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用mybatis自定义日期类型转换器”吧!前言使用mybatis中的typeHan...
    99+
    2023-06-29
  • 使用JPA自定义VO类型转换(EntityUtils工具类)
    目录JPA自定义VO类型转换(EntityUtils工具类)dto,vo,po,bo等实体转换工具类下面宣布这次的主角:dozerJPA自定义VO类型转换(EntityUtils工具...
    99+
    2022-11-12
  • 使用 mybatis 自定义日期类型转换器的示例代码
    目录前言一、resources1.1sqlMapConfig.xml1.2log4j.properties1.3userMapper.xml二、java结构2.1dao2.2hand...
    99+
    2022-11-13
  • Spring中自定义数据类型转换的方法详解
    目录类型转换服务实现Converter接口实现ConverterFactory接口实现GenericConverter接口环境:Spring5.3.12.RELEASE。 Sprin...
    99+
    2022-11-13
  • 利用SpringMVC如何实现一个自定义类型转换器
    这篇文章将为大家详细讲解有关利用SpringMVC如何实现一个自定义类型转换器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对...
    99+
    2023-05-31
    springmvc 类型转换器
  • hibernate或jpa中使用AliasToBeanResultTransformer自定义类型转换ResultTransformer下划线转驼峰
    在Hibernate或JPA中使用`AliasToBeanResultTransformer`进行自定义类型转换时,可以通过以下步骤...
    99+
    2023-09-12
    jpa
  • .Net自定义转换器JsonConverter的使用详解
    目录场景描述通过JsonSerializerOptions参数,绑定JsonConverter来实现在实体类的属性上 增加JsonConverter注解来实现参考官方文档 场景描述 ...
    99+
    2023-05-17
    .net 自定义转换器JsonConverter 自定义转换器JsonConverter使用
  • java中的类型自动转换机制解析
    目录类型自动转换机制解析概述数据类型只会自动提升,不能自动降低Java中整数默认的数据类型是int类型自动类型转换 & 强制类型转换什么时候会发生类型转换类型转换分类自动类型...
    99+
    2022-11-13
  • 怎么在C++中定义RTTI的类型进行转换
    这篇文章给大家介绍怎么在C++中定义RTTI的类型进行转换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言RTTI 是 Run Time Type Information 的缩写,从字面上来理解就是执行时期的类型信息...
    99+
    2023-06-07
  • 详解自定义SpringMVC的Http信息转换器的使用
    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制。使用系统默认配置的HttpMessageConverter进行解析,然后...
    99+
    2023-05-30
    springmvc 转化器
  • jackson在springboot中的使用方式-自定义参数转换器
    目录springboot jackson使用-自定义参数转换器要实现的功能思路关键代码Jackson自定义转换器@JsonDeserialize注解源码以日期类型为例自定义转换方法s...
    99+
    2022-11-12
  • java中类型自动转换机制的示例分析
    这篇文章主要介绍了java中类型自动转换机制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类型自动转换机制解析概述自动类型转换也叫隐式类型转换表达式的数据类型自动提...
    99+
    2023-06-29
  • Java详解数据类型的定义与使用
    目录标识符和关键字标识符什么是标识符标识符的定义规则关键字常量和变量常量变量变量的声明格式变量的声明基本数据类型整数类型浮点类型浮点类型常量浮点类型变量字符类型字符型字符串型布尔类型...
    99+
    2022-11-13
  • 怎么在Java中对TreeSet进行自定义类型的排序
    怎么在Java中对TreeSet进行自定义类型的排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java可以用来干什么Java主要应用于:1. web开发;2. Androi...
    99+
    2023-06-06
  • vue props使用typescript自定义类型的方法实例
    目录前言一、问题定位二、初级解决方案解法一,函数法解法二 PropType泛型三、props的校验过程四、后话参考总结 前言 Base: vue@3.2.33 + type...
    99+
    2023-01-28
    vue组件props ts自定义类型
  • JSP中自定义标记符的使用 (转)
    JSP中自定义标记符的使用 (转)[@more@]JSP中自定义标记符的使用  摘要   在JSP中有一种机制,可以让你在JSP页面中插入与HTML类似的标记。本文介绍JSP定制标记的基本概念和构成,以及如何开发和应用JSP定制标...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作