diff --git a/easyexcel-webflux-test/pom.xml b/easyexcel-webflux-test/pom.xml new file mode 100644 index 00000000..093fda82 --- /dev/null +++ b/easyexcel-webflux-test/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + com.alibaba + easyexcel-parent + 3.2.1 + + + easyexcel-webflux-test + + + 8 + 8 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-webflux + test + + + com.alibaba + easyexcel-core + test + + + + diff --git a/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/EasyexcelWebfluxApplication.java b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/EasyexcelWebfluxApplication.java new file mode 100644 index 00000000..5d35211d --- /dev/null +++ b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/EasyexcelWebfluxApplication.java @@ -0,0 +1,15 @@ +package com.alibaba.easyexcel.test.webflux; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author gxz gongxuanzhangmelt@gmail.com + **/ +@SpringBootApplication +public class EasyexcelWebfluxApplication { + + public static void main(String[] args) { + SpringApplication.run(EasyexcelWebfluxApplication.class, args); + } +} diff --git a/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/controller/HelloController.java b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/controller/HelloController.java new file mode 100644 index 00000000..67b7d53a --- /dev/null +++ b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/controller/HelloController.java @@ -0,0 +1,38 @@ +package com.alibaba.easyexcel.test.webflux.controller; + +import com.alibaba.easyexcel.test.webflux.service.HelloService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + + +/** + * @author gongxuanzhang + **/ +@RestController +public class HelloController { + + @Autowired + private HelloService helloService; + + @GetMapping(value = "/download") + @ResponseBody + public ResponseEntity> exportExcel() { + String fileName = "export.xlsx"; + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE) + .body(helloService.generateExcel().flatMap(x -> { + Resource resource = new InputStreamResource(x); + return Mono.just(resource); + })); + } + +} diff --git a/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/entity/DemoData.java b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/entity/DemoData.java new file mode 100644 index 00000000..c0b18932 --- /dev/null +++ b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/entity/DemoData.java @@ -0,0 +1,21 @@ +package com.alibaba.easyexcel.test.webflux.entity; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.util.Date; + + +/** + * @author gongxuanzhang + */ +@Data +public class DemoData { + @ExcelProperty("字符串标题") + private String string; + @ExcelProperty("日期标题") + private Date date; + @ExcelProperty("数字标题") + private Double doubleData; +} + diff --git a/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/service/HelloService.java b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/service/HelloService.java new file mode 100644 index 00000000..c202ebbb --- /dev/null +++ b/easyexcel-webflux-test/src/test/java/com/alibaba/easyexcel/test/webflux/service/HelloService.java @@ -0,0 +1,45 @@ +package com.alibaba.easyexcel.test.webflux.service; + +import com.alibaba.easyexcel.test.webflux.entity.DemoData; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; +import org.springframework.stereotype.Component; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.util.Date; +import java.util.List; + +/** + * @author gxz gongxuanzhangmelt@gmail.com + **/ +@Component +public class HelloService { + + + public Mono generateExcel() { + return Mono.fromCallable(() -> { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + EasyExcel.write(stream, DemoData.class) + .sheet("模板") + .doWrite(this::data); + return new ByteArrayInputStream(stream.toByteArray()); + }).subscribeOn(Schedulers.boundedElastic()); + } + + private List data() { + List list = ListUtils.newArrayList(); + for (int i = 0; i < 10; i++) { + DemoData data = new DemoData(); + data.setString("字符串" + i); + data.setDoubleData(1.1); + data.setDate(new Date()); + list.add(data); + } + return list; + } + + +} diff --git a/pom.xml b/pom.xml index cceb0f94..c002f060 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ easyexcel-support easyexcel-test easyexcel + easyexcel-webflux-test @@ -152,6 +153,11 @@ spring-boot-starter-web 2.6.3 + + org.springframework.boot + spring-boot-starter-webflux + 2.6.3 + junit junit