Spring 이상 처리: @ ExceptionHandler 백 엔 드 가 전단 에 이상 을 던 지 는 방법 에 대해 자세히 설명 합 니 다.
스프링 부 트 를 기반 으로 한 자바 백 엔 드 개발 에 착수 해 어떻게 우아 하 게 전면 에 이상 을 던 져 야 할 지 고민 했다.다행히 스프링 이 이상 처리 수단 을 제공 한 것 으로 밝 혀 졌 다.
Spring 은 @ ExceptionHandler 를 통 해 시스템 이 실 행 될 때 던 지 는 이상 을 차단 합 니 다.그 효과 적 인 역할 도 메 인 은 자신 이 처 한 Controller 입 니 다. 즉, 이상 처리 방법 은 다른 Controller 류 에서 던 진 이상 을 차단 하고 처리 할 수 없습니다.하지만 클래스 에서 @ Controller Advice (컨트롤 러 강화) 를 사용 할 수 있 습 니 다. 이 주 해 는 성명 의 클래스 에서 @ ExceptionHandler, @ InitBinder, @ ModelAttribute 주 해 를 사용 하 는 방법 을 모든 @ RequestMapping 주 해 를 사용 할 수 있 습 니 다. 전역 이상 을 차단 하 는 @ ExceptionHandler 를 설명 합 니 다.이렇게 하면 코드 의 번 거 로 움 을 효과적으로 줄 일 수 있다.구체 적 으로 어떻게 사용 하 는 지 는 구체 적 인 업무 수요 에 따라 결정 해 야 한다.
아래 코드:
ErrorInfo. java (이 종 류 는 전단 의 실체 로 되 돌아 가 는 데 사 용 됩 니 다)
public class ErrorInfo {
private boolean success;
private String msg;
private Object errors;
public boolean isSuccess(){
return this.success;
}
public String getMsg() {
return this.msg;
}
public Object getErrors() {
return this.errors;
}
public void setSuccess(boolean success)
{
this.success = success;
}
public void setMsg(String msg) {
this.msg = msg;
}
public void setErrors(Object errors) {
this.errors = errors;
}
}
BizException. java (BizException 은 우리 가 정의 한 업무 이상 클래스 입 니 다)
public class BizException extends Exception{
/**
* @fields serialVersionUID
*/
private static final long serialVersionUID = -2420754730135049197L;
private Object data;
public BizException() {
super();
}
public BizException(String message) {
super(message);
}
public Object getData() {
return this.data;
}
public void setData(Object data) {
this.data = data;
}
}
GlobalException Handler. java (이 종 류 는 모든 Controller 에서 던 진 BizException 을 처리 하 는 데 사 용 됩 니 다)
@RestController
@ControllerAdvice
public class GlobalExceptionHandler {
private final Logger logger = LoggerFactory.getLogger(getClass());
@ExceptionHandler({BizException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorInfo handleBizException(BizException e){
this.logger.info("------------ BIZ ------------");
ErrorInfo r = new ErrorInfo();
r.setSuccess(false);
r.setMsg(e.getMessage());
this.logger.info("ErrorInfo==" + ToStringBuilder.reflectionToString(r));
this.logger.info("------------ BIZ ------------");
return r;
}
}
여기 서, 우 리 는 단지 BizException 을 차단 했다 고 성명 할 뿐, Exception Handler 에서 여러 개의 Exception 을 차단 하 는 것 을 지지 합 니 다. 괄호 안에 새로운 성명 을 추가 하면 됩 니 다. @Response Status 는 프론트 에 되 돌아 오 는 Http 상태 코드 를 설정 하 는 데 사 용 됩 니 다. 개인 적 으로 BAD 로 설정 하 는 것 을 권장 합 니 다.REQUEST, 즉 400.
전체 차단 이상 이 필요 하지 않 을 때, 우 리 는 이렇게 쓸 수 있 습 니 다: Association Controller. 자바 (일반 Controller 류)
@RestController
public class AssociationController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
IStudentService studentService;
// ...
@RequestMapping(value = "/student/get" , method = RequestMethod.GET)
public Student getStudent(@RequestParam(value="name",required=false)String name) throws BizException{
Student student = null;
if (name != null) {
if (name.equals("Chaves")) {
throw new BizException("Chaves is invalid!");
}
student = studentService.findByName(name);
}
return student;
}
@ExceptionHandler({BizException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorInfo handleBizException(BizException e){
this.logger.info("------------ AssociationController BIZ ------------");
ErrorInfo r = new ErrorInfo();
r.setSuccess(false);
r.setMsg(e.getMessage());
this.logger.info("ErrorInfo==" + ToStringBuilder.reflectionToString(r));
this.logger.info("------------ AssociationController BIZ ------------");
return r;
}
}
이때 이 Excetion Handler 는 현재 클래스 에서 발생 하 는 BizException 만 차단 할 수 있 습 니 다.
이상나의 문장 이 너 에 게 도움 이 되 기 를 바란다.나 는 글 속 의 모든 견해 가 100% 정확 하 다 고 보장 할 수 는 없 지만, 나 는 그것들 이 모두 나의 이해 와 깨 달 음 이 고, 복사 와 붙 여 넣 기 를 거절 하 는 것 이 라 고 보장 할 수 있다.어떤 의견, 견해 또는 의혹 이 있 으 면 댓 글 토론 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.