【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

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Spring Security方法级安全控制@PreAuthorize注解的灵活运用小结

《SpringSecurity方法级安全控制@PreAuthorize注解的灵活运用小结》本文将带着大家讲解@PreAuthorize注解的核心原理、SpEL表达式机制,并通过的示例代码演示如... 目录1. 前言2. @PreAuthorize 注解简介3. @PreAuthorize 核心原理解析拦截与

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进