为网站的特色功能设计各种模板网站建设主要问题及建议

张小明 2026/1/13 10:05:39
为网站的特色功能设计各种模板,网站建设主要问题及建议,常用网站开发技术,广州建设网站哪家好结合 Spring AOP (面向切面编程) 和 Alibaba EasyExcel。 EasyExcel 是阿里巴巴开源的工具#xff0c;相比 Apache POI#xff0c;它极其节省内存#xff08;基于流式读写#xff09;#xff0c;并且对注解支持非常好。1. 引入依赖 (Maven) 在 pom.xml 中引入 EasyExcel 和…结合Spring AOP (面向切面编程)和Alibaba EasyExcel。EasyExcel 是阿里巴巴开源的工具相比 Apache POI它极其节省内存基于流式读写并且对注解支持非常好。1. 引入依赖 (Maven)在pom.xml中引入 EasyExcel 和 Spring Boot AOP。dependencies!-- Web 依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- AOP 依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency!-- Alibaba EasyExcel (高性能 Excel 工具) --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion3.3.2/version!-- 请检查最新版本 --/dependency!-- Lombok (简化代码可选) --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependency/dependencies2. 定义自定义注解ResponseExcel创建一个注解用于标记 Controller 方法告诉 AOP 这个接口需要导出 Excel。packagecom.example.demo.annotation;importjava.lang.annotation.*;Target(ElementType.METHOD)// 作用于方法Retention(RetentionPolicy.RUNTIME)// 运行时有效DocumentedpublicinterfaceResponseExcel{// 导出的文件名StringfileName()defaultdata;// Sheet 名称StringsheetName()defaultSheet1;// 导出的实体类类型用于解析表头Class?clazz();}3. 定义导出实体类 (Model)使用 EasyExcel 提供的ExcelProperty注解来定义表头。packagecom.example.demo.model;importcom.alibaba.excel.annotation.ExcelIgnore;importcom.alibaba.excel.annotation.ExcelProperty;importcom.alibaba.excel.annotation.write.style.ColumnWidth;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importjava.util.Date;DataAllArgsConstructorNoArgsConstructorpublicclassUserExcelVO{ExcelProperty(用户ID)ColumnWidth(20)privateLongid;ExcelProperty(用户名)ColumnWidth(30)privateStringusername;ExcelProperty(年龄)privateIntegerage;ExcelProperty(注册时间)ColumnWidth(30)privateDatecreateTime;ExcelIgnore// 忽略该字段不导出privateStringpassword;}4. 实现 AOP 切面处理逻辑 (核心)这是整个功能的“大脑”。它拦截带有ResponseExcel的方法获取返回值数据列表然后直接写入 HttpServletResponse 流中。packagecom.example.demo.aspect;importcom.alibaba.excel.EasyExcel;importcom.example.demo.annotation.ResponseExcel;importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.Around;importorg.aspectj.lang.annotation.Aspect;importorg.springframework.stereotype.Component;importorg.springframework.web.context.request.RequestContextHolder;importorg.springframework.web.context.request.ServletRequestAttributes;importjavax.servlet.http.HttpServletResponse;importjava.net.URLEncoder;importjava.util.List;AspectComponentpublicclassExcelExportAspect{/** * 环绕通知 * 拦截被 ResponseExcel 注解的方法 */Around(annotation(responseExcel))publicObjectaround(ProceedingJoinPointpoint,ResponseExcelresponseExcel)throwsThrowable{// 1. 执行目标方法获取返回的数据列表Objectresultpoint.proceed();// 如果返回的不是 List或者为空则直接返回原结果或抛出异常视业务而定if(!(resultinstanceofList)){returnresult;}List?dataList(List?)result;// 2. 获取 Response 对象ServletRequestAttributesrequestAttributes(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();if(requestAttributesnull){returnnull;}HttpServletResponseresponserequestAttributes.getResponse();if(responsenull){returnnull;}// 3. 设置响应头信息response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet);response.setCharacterEncoding(utf-8);// 防止中文乱码StringfileNameURLEncoder.encode(responseExcel.fileName(),UTF-8).replaceAll(\\,%20);response.setHeader(Content-Disposition,attachment;filename*utf-8fileName.xlsx);// 4. 调用 EasyExcel 写入数据到流中try{EasyExcel.write(response.getOutputStream(),responseExcel.clazz()).sheet(responseExcel.sheetName()).doWrite(dataList);}catch(Exceptione){// 导出异常处理比如重置 response 输出 JSON 错误信息response.reset();response.setContentType(application/json);response.setCharacterEncoding(utf-8);response.getWriter().println({\code\: 500, \message\: \导出Excel失败: e.getMessage()\});}// 5. 返回 null因为数据已经写入 Response 流不需要 Spring MVC 再处理返回值returnnull;}}5. Controller 调用示例现在你只需要在 Controller 方法上加上ResponseExcel即可实现导出业务逻辑只需返回List。packagecom.example.demo.controller;importcom.example.demo.annotation.ResponseExcel;importcom.example.demo.model.UserExcelVO;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;RestControllerRequestMapping(/excel)publicclassExcelController{/** * 导出用户列表 * 访问地址: http://localhost:8080/excel/export */GetMapping(/export)ResponseExcel(fileName用户列表,sheetName用户数据,clazzUserExcelVO.class)publicListUserExcelVOexportUsers(){// 模拟查询数据库获取数据ListUserExcelVOlistnewArrayList();list.add(newUserExcelVO(1L,张三,20,newDate(),123));list.add(newUserExcelVO(2L,李四,25,newDate(),456));list.add(newUserExcelVO(3L,王五,30,newDate(),789));// 直接返回 List 数据即可AOP 会自动接管导出逻辑returnlist;}}注意事项返回类型被注解的方法必须返回ListT类型的数据否则 AOP 可能会抛错或忽略。JDK 8 兼容性EasyExcel 和上述代码完全兼容 JDK 8。文件名乱码代码中使用了URLEncoder.encode(..., UTF-8)并设置了filename*utf-8这是标准的 HTTP 协议写法能兼容绝大多数现代浏览器下载中文文件不乱码。大数据量导出上面的代码是一次性把 List 加载到内存。如果你要导出 10 万行以上的数据建议修改 Controller 和 AOP 逻辑使其支持分页查询写入doWrite可以多次调用或者直接在 AOP 中接受Collection。EasyExcel 本身是流式的只要你不把百万条数据一次性new出来放到 List 里它就不会 OOM。前端联调前端调用此接口时需要将responseType设置为blob否则下载的文件可能是乱码字符串。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

东莞网站建设分享seo网站设计与实现毕业设计

题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。代码:class Solution {public int searchInsert(in…

张小明 2026/1/10 16:06:51 网站建设

公司网站设计注意事项做网站广告多少钱

国产AI生态崛起:PaddlePaddle如何赋能千行百业智能化升级 在智能制造工厂的质检线上,一台工业相机每秒捕捉数百张产品图像,后台系统必须在200毫秒内判断是否存在微米级缺陷;在三甲医院的影像科,AI助手正协助医生从上千…

张小明 2026/1/10 17:43:34 网站建设

网站建设加盟代理高端品牌网站建设优势

如何快速掌握Vanta.js:面向初学者的完整配置指南 【免费下载链接】vanta Animated 3D backgrounds for your website 项目地址: https://gitcode.com/gh_mirrors/va/vanta Vanta.js是一个功能强大的JavaScript库,专门为网站添加令人惊叹的3D动画背…

张小明 2026/1/10 12:27:30 网站建设

淘宝上可以做网站吗网站建设搜索优化

文章目录0 简介1 人脸识别 - 常用实现技术1.1 基于几何特征的人脸识别方法1.2 初级神经网络方法。1.3 深度学习方法。2 人脸识别算法缺陷3 人脸识别流程3.1 相关数据集3.2 对齐3.3 仿射变换3.4 人脸目标检测3.5 人脸特征提取3.5.1 分类模型有哪些3.5.2 度量学习模型——FaceNet…

张小明 2026/1/10 16:06:53 网站建设

如何禁止某ip访问网站百度学术搜索入口

终极指南:如何使用NanaZip快速压缩和解压文件 【免费下载链接】NanaZip The 7-Zip derivative intended for the modern Windows experience 项目地址: https://gitcode.com/gh_mirrors/na/NanaZip NanaZip是一个专为现代Windows体验设计的开源文件压缩工具&…

张小明 2026/1/10 16:06:54 网站建设

吉安网站开发设计师网站家装

企业网站后台管理系统富文本编辑器Word/公众号内容导入功能集成方案 需求分析与技术评估 作为吉林某国企项目负责人,我们近期需要对现有企业网站后台管理系统的文章发布模块进行功能升级,主要需求如下: 核心需求: 在FCKEditor…

张小明 2026/1/10 16:06:56 网站建设