SpringBoot返回多种格式的数据的实现⽰例⽬录
⼀、SpringBoot整合FastJson
1.1、引⼊FastJson依赖包
1.2、创建⼀个Web MVC的配置类,并放在springboot扫描包路径下。
1.3、测试fastjson是否引⼊成功。
⼆、SpringBoot返回XML数据
2.1、引⼊jackson组件依赖
2.2、新建vo类,引⼊jackson-xml注解
2.3、建⽴RestController测试返回数据
三、SpringBoot返回PDF数据
3.1、引⼊ITextPdf组件依赖
3.2、引⼊系统字体库
3.3、在pdf中存⼊图⽚
3.4、创建pdf⽣成控制器
四、SpringBoot返回Excel数据
4.1、引⼊easypoi-spring-boot-starter依赖库
4.2、新建Message类
4.3、新建ExcelAction负责⽣成Excel
五、SpringBoot返回资源流
5.1、返回图像流
5.2、返回视频流
六、SpringBoot⽂件下载
⼀、SpringBoot整合FastJson
1.1、引⼊FastJson依赖包
maven项⽬:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
gradle项⽬:
compile 'com.alibaba:fastjson:1.2.78' // 引⼊fastjson
1.2、创建⼀个Web MVC的配置类,并放在springboot扫描包路径下。
package fig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fig.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import t.annotation.Configuration;
import org.springframework.http.MediaType;
import org.verter.HttpMessageConverter;
import org.verter.json.MappingJackson2HttpMessageConverter;
import org.springframework.fig.annotation.WebMvcConfigurer;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 1.springboot默认使⽤Jaskson组件,需要先移除Jaskson组件
for (HttpMessageConverter<?> converter : converters) { // 循环所有的转换器
if (converter instanceof MappingJackson2HttpMessageConverter) {
}
}
// 2. 项⽬中添加fastJson转换器
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); // 3. 配置fastJson转换器
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures( // 配置序列化相关操作
SerializerFeature.WriteMapNullValue, // 允许Map内容为null
SerializerFeature.WriteNullListAsEmpty, // list集合为null使⽤[]代替
SerializerFeature.WriteNullStringAsEmpty, // String内容为null使⽤空⽂字代替
SerializerFeature.WriteDateUseDateFormat, // ⽇期格式化输出
SerializerFeature.WriteNullNumberAsZero, // 数字为空使⽤0代替
SerializerFeature.DisableCircularReferenceDetect // 禁⽤循环引⽤
);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); // 配置fastjson转换处理
// 4. 配置响应的头信息
write的返回值List<MediaType> fastJsonMediaTypes = new ArrayList<>(); // 所有的响应类型
fastJsonMediaTypes.add(MediaType.APPLICATION_JSON); // 使⽤JSON类型进⾏相应
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastJsonMediaTypes);
// 5. 转换器列表中添加配置好的fastjson组件
converters.add(fastJsonHttpMessageConverter);
}
}
1.3、测试fastjson是否引⼊成功。
创建Message类:
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class Message {
private String title;
@JsonFormat(pattern = "yyyy年MM⽉dd⽇")
private Date pubDate;
private String content;
}
RestController中添加测试⽅法:
@RequestMapping("/echo")
public Object echo(Message message) {
message.setTitle("【echo】" + Title());
message.setContent("【echo】" + Content());
return message;
}
访问echo发现fastjson引⼊成功:
⼆、SpringBoot返回XML数据
2.1、引⼊jackson组件依赖
jackson组件既⽀持json操作,也⽀持xml操作。
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.12.2</version>
</dependency>
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.2</version>
</dependency>
<dependency>
<groupId>com.</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.12.2</version>
</dependency>
如果使⽤的是gradle构建项⽬:
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.2'
compile 'com.:jackson-databind:2.12.2'
compile 'com.:jackson-annotations:2.12.2'
2.2、新建vo类,引⼊jackson-xml注解
package com.it.vo;
import lombok.Data;
l.bind.annotation.XmlElement;
l.bind.annotation.XmlRootElement;
import java.util.Date;
@Data
@XmlRootElement // 定义XML根元素
public class Message {
@XmlElement // xml元素
private String title;
@XmlElement
private Date pubDate;
@XmlElement
private String content;
}
2.3、建⽴RestController测试返回数据
@RequestMapping("/echo")
public Object echo(Message message) {
message.setTitle("【echo】" + Title());
message.setContent("【echo】" + Content());
return message;
}
三、SpringBoot返回PDF数据
PDF是Portable Document Format的简称,意为“可携带⽂档格式”,是由Adobe Systems⽤于与应⽤程序、操作系统、硬件⽆关的⽅式进⾏⽂件交换所发展出的⽂件格式。PDF⽂件以PostScript语⾔图象模型为基础,⽆论在哪种打印机上都可保证精确的颜⾊和准确的打印效果,即PDF会忠实地再现原稿的每⼀个字符、颜⾊以及图象。
在java项⽬中,itextpdf组件是⽐较常见的pdf创建⼯具、如果想要让SpringBoot程序以PDF的形式进⾏相应,那么需要引⼊ITextPdf创建组件依赖。
3.1、引⼊ITextPdf组件依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.2</version>
</dependency>
如果使⽤的是gradle构建的项⽬:
compile 'com.itextpdf:itextpdf:5.5.13.2'
3.2、引⼊系统字体库
将pdf打印需要⽤到的字体放到项⽬资源路径:src/main/resources/fonts下(windows系统字体库路径:C:\Windows\Fonts)
3.3、在pdf中存⼊图⽚
在src/main/resources/images下存放⼀张图⽚pic.jpg。
3.4、创建pdf⽣成控制器
package com.it.action;
import *;
import pdf.BaseFont;
import pdf.PdfPCell;
import pdf.PdfPTable;
import pdf.PdfWriter;
import io.ClassPathResource;
import io.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
@Controller
@RequestMapping("/pdf")
public class PDFAction {
@GetMapping("/create")
public void createPDF(HttpServletResponse response) throws Exception { // 使⽤response处理响应
response.setHeader("Content-Type", "application/pdf"); // 设置相应类型
// 强制开启下载,并配置下载名称
response.setHeader("Content-Disposition", "attachment;filename=a.pdf");
// 使⽤iTextPdf在内存⽣成pdf
Document document = new Document(PageSize.A4, 10, 10, 50, 20); // 设置页⾯⼤⼩、边距
// 获取pdf的输出流配置
// 开始构建pdf⽂档内容
document.open();
Resource imageResource = new ClassPathResource("/images/pic.jpg"); // Spring提供的资源访问
Image image = File().getAbsolutePath()); // 通过指定路径加载图⽚ // PDF在⽣成⽂件的时候是基于坐标的⽅式进⾏绘制
image.scaleToFit(Width() / 2, Height());
float printX = (Width() - ScaledWidth()) / 2;
float printY = Height() - Height() - 100;
image.setAbsolutePosition(printX, printY); // 设置图⽚绘制坐标
document.add(image);
document.add(new Paragraph("\n\n\n")); //图⽚之后换三⾏输出⽂字
// 加载字库
Resource fontResource = new ClassPathResource("/fonts/FZSTK.TTF");
BaseFont baseFont = File().getAbsolutePath(),
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 20, Font.NORMAL); // 引⽤字库
// pdf上绘制⽂本信息
String[] titles = new String[]{"springboot test"};
for (String title : titles) { // 循环输出
PdfPTable table = new PdfPTable(2); // 定义表格
PdfPCell cell = new PdfPCell(); //创建单元格
cell.setPhrase(new Paragraph(title, font)); // 单元格内容
table.addCell(cell); // 追加单元格
document.add(table); // 追加⽂档
}
document.close();
}
}
四、SpringBoot返回Excel数据
springboot为了便于⽤户⽣成Excel⽂件,提供了easypoi-spring-boot-starter依赖库。
4.1、引⼊easypoi-spring-boot-starter依赖库
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
如果是gradle项⽬:
compile 'cn.afterturn:easypoi-spring-boot-starter:4.4.0'
4.2、新建Message类
excel表格可以通过java bean转换⽣成。
package com.it.vo;
import cn.l.annotation.Excel;
import lombok.Data;
import java.util.Date;
@Data
public class Message {
@Excel(name = "信息标题", orderNum = "0", width = 30)
private String title;
@Excel(name = "信息⽇期", orderNum = "1", width = 50)
private Date pubDate;
@Excel(name = "信息内容", orderNum = "2", width = 100)
private String content;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论