Browse Source

新建项目,统一异常处理,统一返回数据格式

master
刘力 3 years ago
commit
fce0653636
  1. 19
      common/pom.xml
  2. 33
      common/src/main/java/com/storeroom/exception/BaseException.java
  3. 23
      common/src/main/java/com/storeroom/exception/JsonException.java
  4. 19
      common/src/main/java/com/storeroom/exception/PageException.java
  5. 30
      common/src/main/java/com/storeroom/exception/constant/Status.java
  6. 27
      common/src/main/java/com/storeroom/exception/controller/TestController.java
  7. 153
      common/src/main/java/com/storeroom/exception/handler/ApiResponse.java
  8. 46
      common/src/main/java/com/storeroom/exception/handler/GlobalExceptionHandler.java
  9. BIN
      common/target/classes/com/storeroom/exception/BaseException.class
  10. BIN
      common/target/classes/com/storeroom/exception/JsonException.class
  11. BIN
      common/target/classes/com/storeroom/exception/PageException.class
  12. BIN
      common/target/classes/com/storeroom/exception/constant/Status.class
  13. BIN
      common/target/classes/com/storeroom/exception/controller/TestController.class
  14. BIN
      common/target/classes/com/storeroom/exception/handler/ApiResponse.class
  15. BIN
      common/target/classes/com/storeroom/exception/handler/GlobalExceptionHandler.class
  16. 227
      pom.xml

19
common/pom.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yxk_StoreroomSystem</artifactId>
<groupId>com.storeroom</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>common</artifactId>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
</project>

33
common/src/main/java/com/storeroom/exception/BaseException.java

@ -0,0 +1,33 @@
package com.storeroom.exception;
import com.storeroom.exception.constant.Status;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 统一异常类
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class BaseException extends RuntimeException{
private Integer code;
private String message;
public BaseException(Status status){
super(status.getMessage());
this.code=status.getCode();
this.message=status.getMessage();
}
public BaseException(Integer code,String message){
super(message);
this.code=code;
this.message=message;
}
}

23
common/src/main/java/com/storeroom/exception/JsonException.java

@ -0,0 +1,23 @@
package com.storeroom.exception;
import com.storeroom.exception.constant.Status;
import lombok.Getter;
/**
* Json 异常
*/
@Getter
public class JsonException extends BaseException {
public JsonException(Status status) {
super(status);
}
public JsonException(Integer code,String message) {
super(code, message);
}
}

19
common/src/main/java/com/storeroom/exception/PageException.java

@ -0,0 +1,19 @@
package com.storeroom.exception;
import com.storeroom.exception.constant.Status;
import lombok.Getter;
/**
* 页面异常类
*/
@Getter
public class PageException extends BaseException {
public PageException(Status status) {
super(status);
}
public PageException(Integer code, String message) {
super(code, message);
}
}

30
common/src/main/java/com/storeroom/exception/constant/Status.java

@ -0,0 +1,30 @@
package com.storeroom.exception.constant;
import lombok.Getter;
@Getter
public enum Status {
//操作成功
SUCCESS(200,"操作成功"),
//操作失败
FAIL(999,"操作失败"),
//未知异常
UNKNOWN_ERROR(500,"服务器内部错误");
//状态码
private final Integer code;
//内容
private final String message;
//构造
Status(Integer code,String message){
this.code=code;
this.message=message;
}
}

27
common/src/main/java/com/storeroom/exception/controller/TestController.java

@ -0,0 +1,27 @@
package com.storeroom.exception.controller;
import com.storeroom.exception.JsonException;
import com.storeroom.exception.PageException;
import com.storeroom.exception.constant.Status;
import com.storeroom.exception.handler.ApiResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TestController {
@GetMapping
public ApiResponse<Object> jsonException(){
throw new JsonException(Status.UNKNOWN_ERROR);
}
public ModelAndView pageException(){
throw new PageException(Status.UNKNOWN_ERROR);
}
}

153
common/src/main/java/com/storeroom/exception/handler/ApiResponse.java

@ -0,0 +1,153 @@
package com.storeroom.exception.handler;
import com.storeroom.exception.constant.Status;
import lombok.Data;
/**
* 通用的 API 接口封装
*/
@Data
public class ApiResponse<T> {
/**
* 状态码
*/
private Integer code;
/**
* 返回类容
*/
private String message;
/**
* 返回数据
*/
private Object data;
/**
* 调用接口时间
*/
private long timestamp;
/**
* 无参构造
*/
public ApiResponse() {
//调用时间赋值
this.timestamp = System.currentTimeMillis();
}
/**
* 泛型构造
*
* @param data
*/
private ApiResponse(T data) {
this.code = Status.SUCCESS.getCode();
this.message = Status.SUCCESS.getMessage();
this.data = data;
}
/**
* 无状态码构造
*
* @param status
*/
private ApiResponse(Status status) {
if (null == status) {
return;
}
this.code = status.getCode();
this.message = status.getMessage();
}
/**
* 全参构造函数
*
* @param code
* @param message
* @param data
*/
private ApiResponse(Integer code, String message, Object data) {
this.code = code;
this.message = message;
this.data = data;
}
/**
* 成功返回
*
* @param data 数据
* @param <T>
* @return
*/
public static <T> ApiResponse<T> success(T data) {
ApiResponse<T> apiResponse = new ApiResponse<>();
apiResponse.setCode(Status.SUCCESS.getCode());
apiResponse.setMessage(Status.SUCCESS.getMessage());
apiResponse.setData(data);
return apiResponse;
}
/**
* 返回默认失败
*
* @param code 错误代码
* @param message 错误信息
* @param <T>
* @return
*/
public static <T> ApiResponse<T> error(Integer code, String message) {
ApiResponse<T> respons = new ApiResponse<>();
respons.setCode(code);
respons.setMessage(message);
return respons;
}
/**
* 错误状态返回
*
* @param status 状态码
* @param <T>
* @return
*/
public static <T> ApiResponse<T> error(Status status) {
return new ApiResponse<T>(status);
}
/**
* 服务器错误失败
*
* @param <T>
* @return
*/
public static <T> ApiResponse<T> error() {
return error(Status.UNKNOWN_ERROR);
}
public Integer getCode() {
return code;
}
public ApiResponse<T> setCode(Integer code) {
this.code = code;
return this;
}
public Object getData(){
return data;
}
public ApiResponse<T> setData(T data){
this.data=data;
return this;
}
}

46
common/src/main/java/com/storeroom/exception/handler/GlobalExceptionHandler.java

@ -0,0 +1,46 @@
package com.storeroom.exception.handler;
import com.storeroom.exception.BaseException;
import com.storeroom.exception.constant.Status;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* 统一异常处理
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
@ExceptionHandler(BaseException.class)
@ResponseBody
public ApiResponse<String> exception(Exception e){
log.error("全局异常信息 ex={}",e.getMessage());
return ApiResponse.error(Status.UNKNOWN_ERROR.getCode(),e.getMessage());
}
@ExceptionHandler(NullPointerException.class)
@ResponseBody
public ApiResponse<String> exceptionHandler(HttpServletRequest req,NullPointerException e) {
log.error("发生空指针异常!原因是:",e);
return ApiResponse.error(Status.UNKNOWN_ERROR);
}
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ApiResponse<String> exceptionHandler(HttpServletRequest req,Exception e){
log.error("未知异常 原因是:",e);
return ApiResponse.error(Status.UNKNOWN_ERROR);
}
}

BIN
common/target/classes/com/storeroom/exception/BaseException.class

BIN
common/target/classes/com/storeroom/exception/JsonException.class

BIN
common/target/classes/com/storeroom/exception/PageException.class

BIN
common/target/classes/com/storeroom/exception/constant/Status.class

BIN
common/target/classes/com/storeroom/exception/controller/TestController.class

BIN
common/target/classes/com/storeroom/exception/handler/ApiResponse.class

BIN
common/target/classes/com/storeroom/exception/handler/GlobalExceptionHandler.class

227
pom.xml

@ -0,0 +1,227 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.storeroom</groupId>
<artifactId>yxk_StoreroomSystem</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>common</module>
</modules>
<name>智能库房综合管理系统</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<log4jdbc.version>1.16</log4jdbc.version>
<swagger.version>2.9.2</swagger.version>
<fastjson.version>1.2.78</fastjson.version>
<druid.version>1.2.8</druid.version>
<commons-pool2.version>2.11.1</commons-pool2.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
</parent>
<dependencies>
<!--Spring boot 核心-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--Spring boot Web容器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--Spring boot 测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--Spring boot 安全框架-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- spring boot 缓存 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--Spring boot Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring boot 集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>${commons-pool2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<!--监控sql日志-->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>${log4jdbc.version}</version>
</dependency>
<!-- Swagger UI 相关 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<!--Mysql依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<scope>runtime</scope>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<optional>true</optional>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.12.0</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--mapStruct依赖-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Java图形验证码 -->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
<!--升级nashorn 版本解决JDK15 以上版本验证码报错问题-->
<dependency>
<groupId>org.openjdk.nashorn</groupId>
<artifactId>nashorn-core</artifactId>
<version>15.3</version>
</dependency>
<!-- 解析客户端操作系统、浏览器信息 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</project>
Loading…
Cancel
Save