SpringMVC自定义视图 Excel视图和PDF视图(excel部分自己看过,pdf没接触过 )
一、自定义视图-Excel视图
1、Maven依赖 引入POI
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency>
2、自定义视图解析器(继承AbstractExcelView重写buildExcelDocument方法)
import java.io.OutputStream; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.web.servlet.view.document.AbstractExcelView; import com.cn21.calendar.spider.test.User; public class ViewExcel extends AbstractExcelView { @SuppressWarnings("unchecked") @Override protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { String fileName = "用户列表excel.xls"; response.setCharacterEncoding("UTF-8"); response.setContentType("application/ms-excel"); response.setHeader("Content-Disposition", "inline; filename="+new String(fileName.getBytes(),"iso8859-1")); OutputStream outputStream = response.getOutputStream(); List<User> userList = (List<User>) model.get("userList"); // 产生Excel表头 HSSFSheet sheet = workbook.createSheet("基本信息"); HSSFRow header = sheet.createRow(0); // 产生标题列 header.createCell(0).setCellValue("ID"); header.createCell(1).setCellValue("名字"); header.createCell(2).setCellValue("邮箱"); header.createCell(3).setCellValue("密码"); HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy")); int rowNumber = 1; for (User user : userList) { HSSFRow row = sheet.createRow(rowNumber++); // 产生标题列 row.createCell(0).setCellValue(user.getId()); row.createCell(1).setCellValue(user.getName()); row.createCell(2).setCellValue(user.getEmail()); row.createCell(3).setCellValue(user.getPassword()); } workbook.write(outputStream); outputStream.flush(); outputStream.close(); } }
3、视图映射配置dispather-servlet.xml
<!-- 通过order属性来定义视图解析器的优先级,order的值越小优先级越低 -->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<property name="order" value="0"></property>
</bean>
4、控制器代码示例
@RequestMapping(value = "excel") public ModelAndView viewExcel() { Map<String, Object> model = new HashMap<>(); model.put("userList", getStudents()); return new ModelAndView(new ViewExcel(), model); } private List<User> getStudents() { List<User> userList = new ArrayList<>(); User user = new User("1", "Tome", "Tom@qq.com", "123456"); userList.add(user); return userList; }
5、测试结果
二、PDF视图
1、Maven依赖包引入
dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.1.0</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency>
2、自定义视图解析器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!