【JavaWeb】【瑞吉外卖】分页操作数据传输转换

2024-03-10 21:04

本文主要是介绍【JavaWeb】【瑞吉外卖】分页操作数据传输转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

瑞吉day3
搞定了分页以及数据传输的问题

mybatis-plus分页接口实现

分页主要是通过mybatis提供的接口实现的。这篇笔记只是记录如何实现这个接口,并不会深究原理。
博主也比较菜,目前还没有手撕mybatis代码,后续有机会研究一下(又挖了个坑,哈哈)

实现过程:

  1. 编写一个mybatis配置类
  2. 编写controller接口,输入俩:page下标与pagesize。返回为一个Page对象。

首先,实现分页接口,需要配置一个mybatis的类,并且注入到spring里面去,至于干嘛用的暂时不知道。但作用看起来就是注入了一个关于分页的interceptor进去。
剩下内部细节看代码

// 记得要加这两个注解,注入到spring里面去。
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}}

controller

    /*** 分页查询的接口* @param page          页面下表* @param pageSize      一页的数据条数* @param name* @return*/@GetMapping("/page")public R<Page> page(int page, int pageSize,String name){log.info("page={}, pageSize={}, name={}", page, pageSize, name);// 1. 将传输过来的两个参数封装到Page对象里// 注意这个Page对象是mybatis-plus里的Page pageInfo = new Page(page, pageSize);// 2. 构造querywrapper生成器LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();// 3. 这里只是写了一个鉴别,可以暂时忽略queryWrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name);// 4. 这里规定了一下根据更新时间排序queryWrapper.orderByDesc(Employee::getUpdateTime);// 5. 最后调一下接口,参数就是一开始的Page对象与构造的wrapper// 最终结果会放到Page对象里面employeeService.page(pageInfo, queryWrapper);return R.success(pageInfo);}

数据转换

做完了发现有一个问题。
由于一开始在Java里的类的ID字段是通过雪花算法生成的,且字段类型为long类型。
这个在Java内部是没有问题的,可以正常表示。
但最终传输到前端会出现问题,因为JS并不能表示那么高的整型精度,所以会有精度损失,导致传输错误。

这里黑马给出的一个解决办法是直接将传输的类型变成string类型传输出去。
但怎么改呢?
修改思路是在传输发送出去加一层,将所有long类型转换成string类型。
当然也是直接抄别人就行。

依旧暂不深究原理,只研究怎么实现。

实现过程:

  1. 编写JackonMap类,定义一下转换规则
  2. 去config里面重写一下extendMessageConverters方法,将刚才的mapping加到转换器里就好啦
/*** 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]*/
public class JacksonObjectMapper extends ObjectMapper {public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";public JacksonObjectMapper() {super();//收到未知属性时不报异常this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);//反序列化时,属性不存在的兼容处理this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);SimpleModule simpleModule = new SimpleModule().addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))).addSerializer(BigInteger.class, ToStringSerializer.instance).addSerializer(Long.class, ToStringSerializer.instance).addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));//注册功能模块 例如,可以添加自定义序列化器和反序列化器this.registerModule(simpleModule);}
}//	在继承WebMvcConfigurationSupport的类里重写以下方法完成添加适配器@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("配置转换器....");MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();messageConverter.setObjectMapper(new JacksonObjectMapper());converters.add(0, messageConverter);}

这篇关于【JavaWeb】【瑞吉外卖】分页操作数据传输转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795501

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推