SpringBoot 의 통일 이상 처리
11700 단어 ssh 프레임 워 크학습 노트springBoot
백 스테이지 가 개발 과정 에서 제 이 슨 대상 을 전단 으로 되 돌려 주어 야 한다.이상 이 발생 했 을 때, 우 리 는 마찬가지 로 이상 을 json 형식 에 따라 되 돌려 주 기 를 희망 한다. 전단 은 json 데 이 터 를 되 돌려 주 는 상태 코드 와 정보 에 따라 상응하는 표 시 를 할 수 있다.
이 럴 때 는 Http 의 가장 바깥쪽 패 키 징 대상 을 쓰 고 되 돌아 오 는 대상 데 이 터 를 통일 해 야 합 니 다.Result.java
public class Result {
private Integer code;
private String msg;
private T 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 T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
반환 데이터 대상 에 따라 결과 템 플 릿 도구 류 ResultUtil. 자바 를 패키지 할 수 있 습 니 다.
public class ResultUtil {
public static Result getOK(Object object){
Result result = new Result();
result.setCode(0);
result.setMsg(" ");
result.setData(object);
return result;
}
public static Result getOK(){
return getOK(null);
}
public static Result getError(Integer code,String msg){
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
}
백 스테이지 에서 전단 에서 전 달 된 데 이 터 를 판단 하고 해당 하 는 결 과 를 되 돌려 줄 때 이상 처 리 를 통일 할 수 있 습 니 다.결 과 를 던 지고 직접 던 지면 결 과 는 이전에 우리 가 돌아 온 제 이 슨 형식 이 아니 라 이런 처리 도 우호 적 이지 않다.우 리 는 이상 한 캡 처 를 통 해 결과 템 플 릿 류 (ResultUtil. 자바) 를 호출 하면 봉 인 된 제 이 슨 데 이 터 를 되 돌려 줄 수 있 습 니 다.
이상 포획 클래스 ExceptionHandle. java
import com.demo.result.Result;
import com.demo.result.ResultUtil;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class ExceptionHandle {
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handle(Exception e){
return ResultUtil.getError(100,e.getMessage());
}
}
기본 Exception 을 이용 하여 결 과 를 던 지 는 것 이 라면 되 돌아 오 는 상태 코드 (code) 는 매번 같은 값 이 고 전단 처리 가 쉽 지 않 습 니 다.이렇게 하려 면 Exception 을 사용자 정의 해 야 합 니 다.여기 서 Exception 을 계승 할 수 없습니다. springBoot 는 Runtime Exception 을 계승 하 는 것 만 지원 하기 때 문 입 니 다.
사용자 정의 예외 클래스 UserException. java
public class UserException extends RuntimeException {
private Integer code;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public UserException(Integer code,String message) {
super(message);
this.code = code;
}
}
이 때 이상 포획 클래스 ExceptionHandle. java 도 변경 이 필요 합 니 다.
import com.demo.exception.UserException;
import com.demo.result.Result;
import com.demo.result.ResultUtil;
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.ResponseBody;
@ControllerAdvice
public class ExceptionHandle {
//
private final static Logger logger = LoggerFactory
.getLogger(ExceptionHandle.class);
@ExceptionHandler(Exception.class)
@ResponseBody
public Result handle(Exception e){
if(e instanceof UserException){
UserException userException = (UserException)e;
return ResultUtil.getError(userException.getCode()
,userException.getMessage());
}else{
logger.error("【 】={}",e);
return ResultUtil.getError(-1," !");
}
}
}
결과 에 대한 통일 적 인 처 리 를 통 해 데 이 터 를 전단 으로 우호 적 으로 되 돌 릴 수 있 지만 지금 은 데 이 터 를 되 돌 릴 때마다 상태 코드 와 정 보 는 호출 방법 에서 다시 정의 해 야 한 다 는 문제 가 발견 되 었 습 니 다. 이렇게 하면 상태 가 많 고 조회 와 수정 이 어렵 습 니 다.이 를 위해 매 거 진 클래스 를 정의 할 수 있 으 며, code 와 msg 를 통일 적 으로 관리 할 수 있 습 니 다.ResultEnum.java
public enum ResultEnum {
/**
* . ErrorCode : 0
*/
SUCCESS("0"," "),
/**
* . ErrorCode : 01
*/
UnknownException("01"," "),
/**
* . ErrorCode : 02
*/
SystemException("02"," "),
/**
* . ErrorCode : 03
*/
MyException("03"," "),
/**
* . ErrorCode : 04
*/
InfoException("04", " "),
/**
* . ErrorCode : 020001
*/
DBException("020001"," "),
/**
* . ErrorCode : 040001
*/
ParamException("040001"," ");
private String code;
private String msg;
ResultEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring 프로필 상세 설명1. 기본 설정: 2. AOP 오픈: XML 버 전: 4.SSH: 5.SSH2: 6.SSJ:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.