🎉 添加base包
This commit is contained in:
parent
f2e10a5062
commit
220905e462
@ -5,6 +5,9 @@ package com.darkness.common;
|
|||||||
*/
|
*/
|
||||||
public class PublicConst {
|
public class PublicConst {
|
||||||
|
|
||||||
|
public static final String SCOPE_GENERAL = "general";
|
||||||
|
public static final Integer ERROR_GENERAL_EXCEPTION = 500;
|
||||||
|
|
||||||
// 索引名称
|
// 索引名称
|
||||||
|
|
||||||
// 索引类型
|
// 索引类型
|
||||||
|
71
src/main/java/com/darkness/common/base/ControllerBase.java
Normal file
71
src/main/java/com/darkness/common/base/ControllerBase.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package com.darkness.common.base;
|
||||||
|
|
||||||
|
import com.darkness.common.PublicConst;
|
||||||
|
import com.darkness.common.util.response.RestResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.validation.BindException;
|
||||||
|
import org.springframework.validation.FieldError;
|
||||||
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.InitBinder;
|
||||||
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@RestControllerAdvice
|
||||||
|
public class ControllerBase {
|
||||||
|
|
||||||
|
@ExceptionHandler(Exception.class)
|
||||||
|
public ResponseEntity<Object> handleException(Exception ex) {
|
||||||
|
RestResponse restResponse;
|
||||||
|
if (ex instanceof RuntimeErrorException) {
|
||||||
|
RuntimeErrorException errorException = (RuntimeErrorException) ex;
|
||||||
|
|
||||||
|
String errorDetail = getErrorDetail(ex);
|
||||||
|
log.error(String.format("Exception in processStat request [%s]: %s",WebRequestSequence.current().getRequestSequence(),errorDetail));
|
||||||
|
restResponse = new RestResponse(
|
||||||
|
errorException.getErrorScope(), errorException.getErrorCode(), errorDetail);
|
||||||
|
restResponse.setErrorDetails(errorDetail);
|
||||||
|
|
||||||
|
} else if(ex instanceof BindException){
|
||||||
|
log.error(String.format("Exception in processStat request [%s]: %s", WebRequestSequence.current().getRequestSequence(), ex.getMessage() != null ? ex.getMessage() : ""), ex);
|
||||||
|
BindException bindException = (BindException)ex;
|
||||||
|
FieldError fieldError = bindException.getFieldError();
|
||||||
|
String exMessage = null;
|
||||||
|
if (fieldError != null) {
|
||||||
|
exMessage = fieldError.getDefaultMessage();
|
||||||
|
}
|
||||||
|
restResponse = new RestResponse(
|
||||||
|
PublicConst.SCOPE_GENERAL, PublicConst.ERROR_GENERAL_EXCEPTION, exMessage);
|
||||||
|
restResponse.setErrorDetails(exMessage);
|
||||||
|
}else {
|
||||||
|
log.error(String.format("Exception in processStat request [%s]: %s", WebRequestSequence.current().getRequestSequence(), ex.getMessage() != null ? ex.getMessage() : ""), ex);
|
||||||
|
String exMessage = ex.toString();
|
||||||
|
restResponse = new RestResponse(
|
||||||
|
PublicConst.SCOPE_GENERAL, PublicConst.ERROR_GENERAL_EXCEPTION, exMessage);
|
||||||
|
restResponse.setErrorDetails(exMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpHeaders responseHeaders = new HttpHeaders();
|
||||||
|
responseHeaders.set("Content-Type", "application/json; charset=utf-8");
|
||||||
|
|
||||||
|
return new ResponseEntity<>(restResponse, responseHeaders, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getErrorDetail(Exception ex) {
|
||||||
|
String errorDetail;
|
||||||
|
if (ex.getCause() != null) {
|
||||||
|
errorDetail = ex.getCause().toString();
|
||||||
|
} else {
|
||||||
|
errorDetail = ex.toString();
|
||||||
|
}
|
||||||
|
return errorDetail;
|
||||||
|
}
|
||||||
|
|
||||||
|
@InitBinder
|
||||||
|
public void initListBinder(WebDataBinder binder) {
|
||||||
|
binder.setAutoGrowCollectionLimit(Integer.MAX_VALUE);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,137 @@
|
|||||||
|
package com.darkness.common.base;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RuntimeErrorException extends RuntimeException {
|
||||||
|
private static final long serialVersionUID = 2326809448876379756L;
|
||||||
|
private Severity severity;
|
||||||
|
private String errorScope;
|
||||||
|
private int errorCode;
|
||||||
|
private Map<String, Object> errorMap;
|
||||||
|
|
||||||
|
public RuntimeErrorException() {
|
||||||
|
this.severity = Severity.Error;
|
||||||
|
this.errorCode = -1;
|
||||||
|
this.errorMap = new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException(String message) {
|
||||||
|
super(message);
|
||||||
|
this.severity = Severity.Error;
|
||||||
|
this.errorCode = -1;
|
||||||
|
this.errorMap = new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
this.severity = Severity.Error;
|
||||||
|
this.errorCode = -1;
|
||||||
|
this.errorMap = new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
this.severity = Severity.Error;
|
||||||
|
this.errorCode = -1;
|
||||||
|
this.errorMap = new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Throwable fillInStackTrace() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException setSeverity(Severity severity) {
|
||||||
|
this.severity = severity;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Severity getSeverity() {
|
||||||
|
return this.severity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException setErrorScope(String errorScope) {
|
||||||
|
this.errorScope = errorScope;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrorScope() {
|
||||||
|
return this.errorScope;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException setErrorCode(int errorCode) {
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getErrorCode() {
|
||||||
|
return this.errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException setErrorObject(int index, Object obj) {
|
||||||
|
this.errorMap.put(String.valueOf(index), obj);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getErrorObject(int index) {
|
||||||
|
return this.errorMap.get(String.valueOf(index));
|
||||||
|
}
|
||||||
|
|
||||||
|
public RuntimeErrorException setErrorObject(String name, Object obj) {
|
||||||
|
this.errorMap.put(name, obj);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getErrorObject(String name) {
|
||||||
|
return this.errorMap.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RuntimeErrorException errorWith(String errorScope, int errorCode, String description, Object... errorObjects) {
|
||||||
|
String errorMessage = String.format(description, errorObjects);
|
||||||
|
RuntimeErrorException e = new RuntimeErrorException(errorMessage);
|
||||||
|
e.setErrorScope(errorScope).setErrorCode(errorCode);
|
||||||
|
if (errorObjects != null) {
|
||||||
|
int i = 0;
|
||||||
|
Object[] var7 = errorObjects;
|
||||||
|
int var8 = errorObjects.length;
|
||||||
|
|
||||||
|
for(int var9 = 0; var9 < var8; ++var9) {
|
||||||
|
Object obj = var7[var9];
|
||||||
|
e.setErrorObject(i, obj);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RuntimeErrorException errorWith(Throwable cause, String errorScope, int errorCode, String description, Object... errorObjects) {
|
||||||
|
String errorMessage = String.format(description, errorObjects);
|
||||||
|
RuntimeErrorException e = new RuntimeErrorException(errorMessage, cause);
|
||||||
|
e.setErrorScope(errorScope).setErrorCode(errorCode);
|
||||||
|
if (errorObjects != null) {
|
||||||
|
int i = 0;
|
||||||
|
Object[] var8 = errorObjects;
|
||||||
|
int var9 = errorObjects.length;
|
||||||
|
|
||||||
|
for(int var10 = 0; var10 < var9; ++var10) {
|
||||||
|
Object obj = var8[var10];
|
||||||
|
e.setErrorObject(i, obj);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum Severity {
|
||||||
|
Error,
|
||||||
|
Fatal;
|
||||||
|
|
||||||
|
private Severity() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
package com.darkness.common.base;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
public class WebRequestSequence {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(WebRequestSequence.class);
|
||||||
|
private static final String IGNORED_TRACE = "Ignored_Trace";
|
||||||
|
|
||||||
|
private static ThreadLocal<WebRequestSequence> s_sequences = new ThreadLocal<>();
|
||||||
|
|
||||||
|
private static final AtomicLong s_nextId = new AtomicLong(System.currentTimeMillis());
|
||||||
|
|
||||||
|
private static final boolean TRACE_ENABLED = initTrace();
|
||||||
|
|
||||||
|
private static String prefix = "";
|
||||||
|
|
||||||
|
private String requestSequence = "";
|
||||||
|
private static String traceIdDefault = "";
|
||||||
|
|
||||||
|
static {
|
||||||
|
InetAddress addr;
|
||||||
|
try {
|
||||||
|
addr = InetAddress.getLocalHost();
|
||||||
|
} catch (UnknownHostException var1) {
|
||||||
|
addr = InetAddress.getLoopbackAddress();
|
||||||
|
}
|
||||||
|
if (addr != null) {
|
||||||
|
byte[] address = addr.getAddress();
|
||||||
|
int lastByte = ((int) address[address.length - 1] & 0xff);
|
||||||
|
prefix = lastByte + "-";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean initTrace() {
|
||||||
|
boolean traceAgent = false;
|
||||||
|
try {
|
||||||
|
Class.forName("org.apache.skywalking.apm.agent.SkyWalkingAgent");
|
||||||
|
traceAgent = true;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
LOGGER.info("Trace agent org.apache.skywalking.apm.agent.SkyWalkingAgent not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean traceContext = false;
|
||||||
|
try {
|
||||||
|
Class.forName("org.apache.skywalking.apm.toolkit.trace.TraceContext");
|
||||||
|
traceContext = true;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
LOGGER.info("Trace context org.apache.skywalking.apm.toolkit.trace.TraceContext not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (traceAgent && traceContext) {
|
||||||
|
LOGGER.info("Distribute traceId enabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
LOGGER.info("Local request sequence enabled.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private WebRequestSequence() {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
public static WebRequestSequence current() {
|
||||||
|
WebRequestSequence seq = s_sequences.get();
|
||||||
|
if (seq == null) {
|
||||||
|
seq = new WebRequestSequence();
|
||||||
|
s_sequences.set(seq);
|
||||||
|
}
|
||||||
|
return seq;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRequestSequence() {
|
||||||
|
return this.requestSequence;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setupRequestSequence() {
|
||||||
|
if (TRACE_ENABLED) {
|
||||||
|
String traceId = traceIdDefault;
|
||||||
|
if (!IGNORED_TRACE.equals(traceId)) {
|
||||||
|
this.requestSequence = traceId;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long id = s_nextId.addAndGet(1);
|
||||||
|
this.requestSequence = prefix + String.valueOf(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearRequestSequence() {
|
||||||
|
s_sequences.remove();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package com.darkness.common.util.response;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
@Data
|
||||||
|
public class RestResponse {
|
||||||
|
@JsonProperty("response")
|
||||||
|
private Object responseObject;
|
||||||
|
private String errorScope;
|
||||||
|
private Integer code;
|
||||||
|
private String errorDescription;
|
||||||
|
private String errorDetails;
|
||||||
|
|
||||||
|
public RestResponse() {
|
||||||
|
this.code = 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestResponse(String errorScope, int errorCode, String errorDescription) {
|
||||||
|
this.errorScope = errorScope;
|
||||||
|
this.code = errorCode;
|
||||||
|
this.errorDescription = errorDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestResponse(Object responseObject) {
|
||||||
|
this.responseObject = responseObject;
|
||||||
|
this.code = 200;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user