统一结果返回
统一状态码
package com.baidu.commonutils;
public interface ResultCode {
public static Integer SUCCESS = 20000;//状态码:成功
public static Integer ERROR = 20001;//失败
}
返回统一实体类
package com.baidu.commonutils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* 统一结果返回类,方法内返回this,方便链式编程
*/
@Data
public class R {
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private Map<String,Object> data = new HashMap<>();
private R(){}
public static R ok(){
R r = new R();
r.setCode(ResultCode.SUCCESS);
r.setMessage("成功");
r.setSuccess(true);
return r;
}
public static R error(){
R r = new R();
r.setCode(ResultCode.ERROR);
r.setMessage("失败");
r.setSuccess(false);
return r;
}
public R success(Boolean success){
this.setSuccess(success);
return this;
}
public R message(String message){
this.setMessage(message);
return this;
}
public R code(Integer code){
this.setCode(code);
return this;
}
public R data(String key,Object value){
this.data.put(key,value);
return this;
}
public R data(Map<String,Object> map){
this.setData(map);
return this;
}
}
示例:
@GetMapping("findAll")
public R findAll() {
List<EduTeacher> list = eduTeacherService.list(null);
return R.ok().data("item", list); //统一返回R类
}
统一异常处理
package com.baidu.handler;
import com.baidu.commonutils.R;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 统一异常处理
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(Exception e){
e.printStackTrace();
return R.error().message("全局异常处理执行了...");
}
/**
*可以自定义处理异常
*/
@ExceptionHandler(Exception.class)
@ResponseBody
public R error(GuliException e){
e.printStackTrace();
return R.error().code(e.getCode()).message(e.getMsg());
}
}
自定义异常类
package com.baidu.handler;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GuliException extends RuntimeException {
private Integer code;
private String msg;
}
后端整合swagger
(http://localhost:8001/swagger-ui.html)
package com.baidu.config;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket webApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApi") //name
.apiInfo(webApiInfo()) //下面的方法
.select()
.paths(Predicates.not(PathSelectors.regex("/admin/.*")))//含有admin路径不显示
.paths(Predicates.not(PathSelectors.regex("/error.*")))//含有error不显示
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("网站-课程中心API文档") //标题
.description("本文档描述了课程中心微服务接口定义") //描述
.version("1.0") //版本
.contact(new Contact("zhangsan", "http://baidu.com", "2366508910@qq.com")) //其他相关信息
.build();
}
}
项目整合阿里云oss存储
官方文档:https://www.aliyun.com/sswd/423470-1.html
pom依赖
<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
properties配置
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=yourkey
aliyun.oss.file.keysecret=yourkeyset
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=zhangsan00
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
放置常量的工具类
package com.baidu.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
@Component
public class ConstanPropertyUtils implements InitializingBean {
@Value("${aliyun.oss.file.endpoint}")
private String endPoint;
@Value("${aliyun.oss.file.keyid}")
private String keyId;
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String ENDPOINT;
public static String KEYID;
public static String KEYSECRET;
public static String BUCKETNAME;
//该方法在上面四个变量初始化后执行
@Override
public void afterPropertiesSet() throws Exception {
ENDPOINT = this.endPoint;
KEYID = this.keyId;
KEYSECRET = this.keySecret;
BUCKETNAME = this.bucketName;
}
}
获取上传文件存储到oss中(返回存储路径)
package com.baidu.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.baidu.service.OssService;
import com.baidu.utils.ConstanPropertyUtils;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
// Endpoint以杭州为例,其它Region请按实际情况填写。
String endpoint = ConstanPropertyUtils.ENDPOINT;
// 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
String accessKeyId = ConstanPropertyUtils.KEYID;
String accessKeySecret = ConstanPropertyUtils.KEYSECRET;
String bucketName = ConstanPropertyUtils.BUCKETNAME;
//获取文件名
String fileName = file.getOriginalFilename();
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
fileName = uuid + fileName;
//获取当前时间 年/月/日 根据时间来存储,目录分类
String date = new DateTime().toString("yyyy/MM/dd");
fileName = date+"/" + fileName ;
try{
// 创建OSSClient实例。
//参数1 地域节点 参数2 图片路径+图片名/图片名 参数3 密匙密码
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上传文件流。
InputStream inputStream = file.getInputStream();
ossClient.putObject(bucketName, fileName, inputStream);
// https://zhangsan00.oss-cn-beijing.aliyuncs.com/mm.jpg
// 关闭OSSClient。
ossClient.shutdown();
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;//返回存储路径
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
controller得到存储路径并返回给前端
@PostMapping("upload")
public R fileUpload(MultipartFile file){
String url = ossService.uploadFileAvatar(file);
return R.ok().data("url",url);
}
使用EasyExcel对excel文件读写
(文档:https://alibaba-easyexcel.github.io/index.html)
示例代码
//创建读的监听器
public class ExcelListener extends AnalysisEventListener<DemoData> {
//一行一行读取 第一个参数为每行内容
@Override
public void invoke(DemoData demoData, AnalysisContext analysisContext) {
System.out.println(demoData);
}
//读取表头信息
@Override
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
System.out.println("表头"+headMap);
}
//读取完成后执行的方法
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
//写
@Test
public void test01(){
String path = "E:/write.xls";//表格路径
//excel表格路径 实体类.class 表名 获取list集合
EasyExcel.write(path,DemoData.class).sheet("学生表").doWrite(getList());//写操作
}
//读
@Test
public void test02(){
String path = "E:/write.xls";//表格路径
//excel表格路径 实体类.class 表名 获取list集合
EasyExcel.read(path, DemoData.class, new ExcelListener()).sheet().doRead();
}
private List<DemoData> getList(){
List<DemoData> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
DemoData demoData = new DemoData();//学生实体类,有name和id属性
demoData.setSno(i);
demoData.setSname("lucy"+i);
list.add(demoData);
}
return list;
}
文章转载自JAVA不归路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




