Spring Boot - 전역 캡 처 이상
2. 코드 는 다음 과 같다.
1. 매 거 진 종 류 를 사용자 정의 하여 통일 적 으로 관리 합 니 다.
/**
* : ,
*/
public enum ResultEnum {
SUCCESS(0, " "),
FAILURE(1, " "),
/* :10001-19999 */
PARAM_IS_INVALID(10001, " "),
PARAM_IS_BLANK(10002, " "),
PARAM_TYPE_BIND_ERROR(10003, " "),
PARAM_NOT_COMPLETE(10004, " "),
/* :20001-29999*/
USER_NOT_LOGGED_IN(20001, " "),
USER_LOGIN_ERROR(20002, " "),
USER_ACCOUNT_FORBIDDEN(20003, " "),
USER_NOT_EXIST(20004, " "),
USER_HAS_EXISTED(20005, " "),
/* :30001-39999 */
SPECIFIED_QUESTIONED_USER_NOT_EXIST(30001, " "),
/* :40001-49999 */
SYSTEM_INNER_ERROR(40001, " , "),
/* :50001-599999 */
RESULE_DATA_NONE(50001, " "),
DATA_IS_WRONG(50002, " "),
DATA_ALREADY_EXISTED(50003, " "),
/* :60001-69999 */
INTERFACE_INNER_INVOKE_ERROR(60001, " "),
INTERFACE_OUTTER_INVOKE_ERROR(60002, " "),
INTERFACE_FORBID_VISIT(60003, " "),
INTERFACE_ADDRESS_INVALID(60004, " "),
INTERFACE_REQUEST_TIMEOUT(60005, " "),
INTERFACE_EXCEED_LOAD(60006, " "),
/* :70001-79999 */
PERMISSION_NO_ACCESS(70001, " ");
private Integer code;
private String msg;
ResultEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer code() {
return this.code;
}
public String message() {
return this.msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
2. 되 돌아 오 는 도구 클래스 를 가 져 옵 니 다 (일반적인 패 키 징 수정 도 가능 합 니 다)
/**
* http
*/
public class Result {
/**
* .
*/
private Integer code;
/**
* .
*/
private String msg;
/**
* .
*/
private Object data;
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 Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public void setResultCode(ResultEnum code) {
this.code = code.code();
this.msg = code.message();
}
//
public static Result success() {
Result result = new Result();
result.setResultCode(ResultEnum.SUCCESS);
return result;
}
//
public static Result success(Object data) {
Result result = new Result();
result.setResultCode(ResultEnum.SUCCESS);
result.setData(data);
return result;
}
//
public static Result success(ResultEnum resultEnum, Object data) {
Result result = new Result();
result.setResultCode(resultEnum);
result.setData(data);
return result;
}
//
public static Result failure(ResultEnum resultEnum) {
Result result = new Result();
result.setResultCode(resultEnum);
return result;
}
//
public static Result failure(ResultEnum resultEnum, Object data) {
Result result = new Result();
result.setResultCode(resultEnum);
result.setData(data);
return result;
}
//
public static Result error(Integer code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
}
3. 전역 이상 처리 사용자 정의
/**
* :
* RuntimeException Spring
*/
public class CustomizeException extends RuntimeException {
private Integer code;
public CustomizeException(ResultEnum resultEnum) {
super(resultEnum.getMsg());
this.code = resultEnum.getCode();
}
// msg
public CustomizeException(ResultEnum resultEnum, String msg) {
super(msg);
this.code = resultEnum.getCode();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
4. 전역 이상 포획:
import com.itcast.exception.CustomizeException;
import com.itcast.util.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* :
*/
@ControllerAdvice
@Slf4j
public class ExceptionHandle {
//
@ExceptionHandler(value = Exception.class)
// , , , ,
// , , 。 ResponseStatus
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public Result handle(Exception e) {
//
if (e instanceof CustomizeException) {
CustomizeException girlException = (CustomizeException) e;
log.error("【 】{}", girlException.getMessage());
return Result.error(girlException.getCode(), girlException.getMessage());
} else {
log.error("【 】{}", e);
return Result.error(-1, " ");
}
}
}
5. 테스트
@ApiOperation(value = " ", notes = " ")
@PutMapping("code")
@ResponseBody
public Result ApiCode(@RequestBody Student student) {
if (student.getAge() == 0) {
throw new CustomizeException(ResultEnum.FAILURE, " ");
}
return Result.success(student);
}
사실 통용 되 는 반환 대상 을 정의 하 는 방법 은 여러 가지 방법 이 있 습 니 다. 이런 방법 은 중간 규칙 에 속 하 는 것 입 니 다. 참고 하 시기 바 랍 니 다. 개인 노트 가 조회 되 었 다 면 선배 님 들 의 지적 이 완 선 된 것 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.