spring boot项目:
pom.xml:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.8.RELEASE</version>
</parent> -->
<parent>
<groupId>com.sunwave</groupId>
<artifactId>Sunwave-Parent</artifactId>
<version>2.0.0</version>
</parent>
<artifactId>sunwave-cpe</artifactId>
<name>sunwave-cpe</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</dependency>
<!--注册中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<!-- <version>2.0.3.RELEASE</version> -->
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<!-- <version>2.0.2.RELEASE</version> -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency> -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
</dependencies>
<!-- <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>打包
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable>${JAVA8_HOME}/bin/javac</executable>
</configuration>
</plugin>
</plugins>
</build>
<packaging>war</packaging>
</project>
excel的导入:
@ResponseBody
@SuppressWarnings("deprecation")
@RequestMapping(value="/uploadExcel",method = RequestMethod.POST)
public Json uploadExcel(HttpServletRequest request) {
StandardMultipartHttpServletRequest multiRequest = (StandardMultipartHttpServletRequest) request;
Iterator<String> iter = multiRequest.getFileNames();
String rootPath= request.getRealPath("/");
String relativePath = StaticParam.imageBaseDir+File.separator+StaticParam.floorImageBaseDir+File.separator;
String basePath = rootPath+File.separatorChar+relativePath;
String imagePath = null;
String name= iter.hasNext() ? iter.next() : null;
MultipartFile file = multiRequest.getFile(name);
if(file != null) {
String filename = file.getOriginalFilename();
if (!filename.endsWith(".xls") && !filename.endsWith(".xlsx")) {
return new Json(false, "导入失败,导入的文件必须是以xls或者xlsx结尾的Excel文件!");
} else {
imagePath = UploadUtil.upload(multiRequest,basePath, name);
return new Json(true);
}
}
return new Json(false, "请选择需要导入的文件");
}
工具类1:
package com.sunwave.common;
public class StaticParam {
public static String imageBaseDir = "upload";
public static String floorImageBaseDir = "floorImage";
}
工具类2:
package com.sunwave.deviceManagement.domain.upgrade;
public class Json implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 6493265179641167222L;
private boolean success = false;
private String msg = "";
private Object obj = null;
public Json() {}
public Json(boolean success) {
this.success = success;
}
public Json(boolean success, String msg) {
this.success = success;
this.msg = msg;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void addMsg(String msg) {
this.msg += msg;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
}
工具类3:
package com.sunwave.utils;
import java.io.File;
import java.io.IOException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
/*文件上传实用类*/
public class UploadUtil {
/**
* @param request
* @param basedir 基础文件夹,一般表示用户
* @param filename 文件名
* @return
*/
public static String upload(StandardMultipartHttpServletRequest request, String basedir,
String filename) {
String path = null;
String relativePath = null;
StandardMultipartHttpServletRequest multiRequest = (StandardMultipartHttpServletRequest) request;
MultipartFile file = multiRequest.getFile(filename);
if (file != null) {
/*String name = file.getName();*/
String fileName = file.getOriginalFilename();
if (fileName.lastIndexOf(File.separator) != -1) {
// fileName = fileName.substring(fileName.lastIndexOf(File.separator),fileName.length());
}
String backString = fileName.substring(fileName.lastIndexOf("."), fileName.length());
fileName = System.currentTimeMillis() + backString;
/*String fileTruename = fileName.substring(fileName.lastIndexOf(File.separator),fileName.length());*/
path = basedir + File.separator + fileName;
relativePath = fileName;
File localFile = new File(path);
if (!localFile.getParentFile().exists()) {
localFile.getParentFile().mkdirs();
}
try {
file.transferTo(localFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("path" + path);
return relativePath;
}
}
excel的导出:
实体类:
package com.sunwave.grouping.domain;
import javax.persistence.*;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import com.sunwave.deviceManagement.controller.NeElementController;
import com.sunwave.vo.Result;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author lfw
* @date 2020年8月3日
* @time 下午6:44:54
*
*/
@Entity
@Table(name = "ne_element")
public class NeElement extends BaseRowModel implements Serializable{
/**
* extends BaseRowModel
* 导出excel需要继承 BaseRowModel,还要添加@ExcelProperty()注解
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long neNeid; //设备唯一标识
@ExcelProperty(value="设备连接URL")
private String coonReqUrl; //设备连接URL
@ExcelProperty(value="设备序列号")
private String serialNumber; //设备序列号
@ExcelProperty(value="设备IP")
private String deviceIp; //设备IP
@ExcelProperty(value="modelId")
private String modelId;//modelName对应的id
@ExcelProperty(value="描述")
private String description;//描述
@ExcelProperty(value="制造商")
private String manufacturer;//制造商
@ExcelProperty(value="软件版本")
private String softwareVersion;//软件版本
@ExcelProperty(value="创建时间")
private Date creationTime;//创建时间
@ExcelProperty(value="lastBootstrapTime")
private Date lastBootstrapTime;
@ExcelProperty(value="最后连接时间")
private Date lastConnTime;//最后连接时间
@ExcelProperty(value="更新时间")
private Date updateTime;//更新时间
@ExcelProperty(value="oui")
private String oui;//oui
@ExcelProperty(value="product")
private String product;
@ExcelProperty(value="是否需要认证")
private Boolean authRequirement;//是否需要认证
@ExcelProperty(value="dialectIP")
private String dialectIP;
@ExcelProperty(value="更新用户")
private String updateUser;//更新用户
@ExcelProperty(value="mac地址")
private String macAddress;//mac地址
@ExcelProperty(value="在线状态")
private Integer onlineStatus;//在线状态
@ExcelProperty(value="会话状态")
private Integer sessionStatus;//会话状态
@ExcelIgnore
@ManyToMany(cascade=CascadeType.ALL, mappedBy = "elementList")
@JsonIgnore
private List<DeviceGroup> deviceGroupList=new ArrayList<DeviceGroup>();
@Transient
private String lastVisitTime;
@Transient
private String lastRebootTime;
@Transient
private String modelName;
private Integer isFavourite;//是否喜欢
public Integer getIsFavourite() {
return isFavourite;
}
public void setIsFavourite(Integer isFavourite) {
this.isFavourite = isFavourite;
}
public String getModelName() {
return modelName;
}
public void setModelName(String modelName) {
this.modelName = modelName;
}
public String getLastVisitTime() {
return lastVisitTime;
}
public void setLastVisitTime(String lastVisitTime) {
this.lastVisitTime = lastVisitTime;
}
public String getLastRebootTime() {
return lastRebootTime;
}
public void setLastRebootTime(String lastRebootTime) {
this.lastRebootTime = lastRebootTime;
}
public List<DeviceGroup> getDeviceGroupList() {
return deviceGroupList;
}
public void setDeviceGroupList(List<DeviceGroup> deviceGroupList) {
this.deviceGroupList = deviceGroupList;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getSoftwareVersion() {
return softwareVersion;
}
public void setSoftwareVersion(String softwareVersion) {
this.softwareVersion = softwareVersion;
}
public Date getLastConnTime() {
return lastConnTime;
}
public void setLastConnTime(Date lastConnTime) {
this.lastConnTime = lastConnTime;
}
public String getModelId() {
return modelId;
}
public void setModelId(String modelId) {
this.modelId = modelId;
}
public Long getNeNeid() {
return neNeid;
}
public void setNeNeid(Long neNeid) {
this.neNeid = neNeid;
}
public String getCoonReqUrl() {
return coonReqUrl;
}
public void setCoonReqUrl(String coonReqUrl) {
this.coonReqUrl = coonReqUrl;
}
public String getDeviceIp() {
return deviceIp;
}
public void setDeviceIp(String deviceIp) {
this.deviceIp = deviceIp;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
public Date getCreationTime() {
return creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
public Date getLastBootstrapTime() {
return lastBootstrapTime;
}
public void setLastBootstrapTime(Date lastBootstrapTime) {
this.lastBootstrapTime = lastBootstrapTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getOui() {
return oui;
}
public void setOui(String oui) {
this.oui = oui;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public Boolean getAuthRequirement() {
return authRequirement;
}
public void setAuthRequirement(Boolean authRequirement) {
this.authRequirement = authRequirement;
}
public String getDialectIP() {
return dialectIP;
}
public void setDialectIP(String dialectIP) {
this.dialectIP = dialectIP;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
public String getMacAddress() {
return macAddress;
}
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}
public Integer getOnlineStatus() {
return onlineStatus;
}
public void setOnlineStatus(Integer onlineStatus) {
this.onlineStatus = onlineStatus;
}
public Integer getSessionStatus() {
return sessionStatus;
}
public void setSessionStatus(Integer sessionStatus) {
this.sessionStatus = sessionStatus;
}
}
核心代码:
import com.alibaba.excel.metadata.Sheet;
@ResponseBody
@ApiOperation(value = "导出excel",httpMethod="GET")
@GetMapping("/exportExcel")
public Result exportExcel(HttpServletResponse response,@RequestBody GroupVo groupVo) {
logger.info("Enter into NeElementController.exportExcel");
try {
List<NeElement> list=new ArrayList<NeElement>();
for (int j = 0; j <groupVo.getNeIdList().size(); j++) {
Long neId = groupVo.getNeIdList().get(j);
NeElement element = neElementService.getElementExcel(neId); //根据id查询,NeElement是实体。
// neElementService.onlineStatus(neId);
list.add(element);
}
Sheet sheet = new Sheet(1, 0,NeElement.class);
ExportUtil.doExportExcel(response, "Element", "sheet1", sheet, list);
}catch (Exception e) {
logger.error("Error in NeElementController.exportExcel()" + e.getMessage());
return Result.failure(100, "导出失败");
}
logger.info("Exist NeElementController.exportExcel()");
return Result.ok("导出成功");
}
工具类1:
package com.sunwave.vo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.util.HashMap;
import java.util.Map;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {
private static final String CODE = "code";
private static final String MSG = "msg";
private Integer code=200;
private String msg="操作成功";
private String description;
private T data;
private HashMap<String,Object> exend;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public Result setData(T data) {
this.data = data;
return this;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@JsonIgnore
public HashMap<String, Object> getExend() {
return exend;
}
public void setExend(HashMap<String, Object> exend) {
this.exend = exend;
}
public Result() {
exend = new HashMap<>();
}
public static Result failure(int code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
public static Result ok(String msg) {
Result result = new Result();
result.put("msg", msg);
return result;
}
public static Result ok(Map<String, Object> map) {
Result result = new Result();
result.exend.putAll(map);
return result;
}
public static Result ok() {
return new Result();
}
public Result put(String key, Object value) {
exend.put(key, value);
return this;
}
}
工具类2:
package com.sunwave.vo;
import java.io.Serializable;
import java.util.ArrayList;
public class GroupVo implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String fileId;
private ArrayList<Long> neIdList = new ArrayList<Long>();
private ArrayList<String> groupIdList = new ArrayList<String>();
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public ArrayList<Long> getNeIdList() {
return neIdList;
}
public void setNeIdList(ArrayList<Long> neIdList) {
this.neIdList = neIdList;
}
public ArrayList<String> getGroupIdList() {
return groupIdList;
}
public void setGroupIdList(ArrayList<String> groupIdList) {
this.groupIdList = groupIdList;
}
@Override
public String toString() {
return "GroupVo [fileId=" + fileId + ", neIdList=" + neIdList + ", groupIdList=" + groupIdList + "]";
}
}
工具类3:
package com.sunwave.utils;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
/**
* 阿里easyexcel xlsx导出
*/
public class ExportUtil {
/**
* xlsx导出
* @param response HttpServletResponse
* @param fileName 文件名称
* @param sheetName sheet名称
* @param sheet Sheet sheet = new Sheet(1, 0,UserDTO.class);需要被导出的实体类,实体类需要继承BaseRowModel
* @param list 需要导出的数据集
* @throws IOException
*/
@SuppressWarnings({ "deprecation", "rawtypes" })
public static void doExportExcel(HttpServletResponse response,String fileName,String sheetName,Sheet sheet,List list) throws IOException
{
ServletOutputStream out = response.getOutputStream();
ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX, true);
//设置自适应宽度
sheet.setAutoWidth(Boolean.TRUE);
// 第一个 sheet 名称
sheet.setSheetName(sheetName);
writer.write(list, sheet);
//通知浏览器以附件的形式下载处理,设置返回头要注意文件名有中文
response.setHeader("Content-disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) + ".xlsx");
writer.finish();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
out.flush();
}
}
🆗了!