Spring 이상 처리 자세 총화
1.머리말
통 일 된 이상 처리 가 응용 에 대한 중요성 은 말 하지 않 아 도 안다.오늘 은 Spring 이 어떻게 통일 적 인 Rest 이상 처 리 를 하 는 지 소개 하 겠 습 니 다.동시에 우 리 는 그들 사이 의 우열 을 간단하게 비교 할 것 이다.
2.@Controller 결합@ExceptionHandler
컨트롤 러 에 방법 을 설명 한 다음
@ExceptionHandler
주석 으로 표시 하면 됩 니 다.
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/err")
@ResponseBody
public Object demo1(){
int i = 1 / 0;
return new Date();
}
@ExceptionHandler({RuntimeException.class})
public ModelAndView fix(Exception ex){
System.out.println(ex.getMessage());
return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
}
}
장점:@ExceptionHandler
표 시 된 방법 반환 값 형식 은 여러 가 지 를 지원 합 니 다.보기 일 수도 있 고json
일 수도 있 습 니 다.Controller
의 주석 에 있 는 이상 유형 은 같 을 수 없습니다.그렇지 않 으 면 운행 할 때 이상 을 던 집 니 다.@ExceptionHandler
4567918) Controller
일 뿐 진정한 의미 에서 의 전체적인 이상 이 아니다.전역 에 작용 하려 면 모든 컨트롤 러 의 부모 클래스 에 넣 어야 합 니 다.이것 은 2.의 개선 형 으로 정의
@ControllerAdvice
유형 을 통 해 방법 에 표시@ExceptionHandler
하여 전체 이상 처리 의 목적 을 달성 했다.
@ControllerAdvice
public class TestController {
@ExceptionHandler({RuntimeException.class})
public ModelAndView fix(Exception ex){
System.out.println(ex.getMessage());
return new ModelAndView("error",new ModelMap("ex",ex.getMessage()));
}
}
장점:단점:
Controller
의 주석 에 있 는 이상 유형 은 같 을 수 없습니다.그렇지 않 으 면 운행 할 때 이상 을 던 집 니 다.@ExceptionHandler
4567918) 4.HandlerExceptionResolver 인터페이스
실현
HandlerExceptionResolver
인터페이스,여기 서 우 리 는 추상 적 인 실현AbstractHandlerExceptionResolver
을 계승 한다.
@Component
public class RestResponseStatusExceptionResolver extends AbstractHandlerExceptionResolver {
@Override
protected ModelAndView doResolveException(
HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
try {
if (ex instanceof IllegalArgumentException) {
return handleIllegalArgument((IllegalArgumentException) ex, response, handler);
}
//todo more exception
} catch (Exception handlerException) {
//todo
}
return null;
}
private ModelAndView
handleIllegalArgument(IllegalArgumentException ex, HttpServletResponse response)
throws IOException {
response.sendError(HttpServletResponse.SC_CONFLICT);
String accept = request.getHeader(HttpHeaders.ACCEPT);
//todo more response
return new ModelAndView();
}
}
장점:JSP
,velocity
등 템 플 릿 보기 가 비교적 편리 하 다.ModelAndView
이지 만 매개 변수 에HttpServletResponse
가 있 기 때문에 저 희 는 이 를 이용 하여 맞 춤 형 응답 결 과 를 만 들 수 있 습 니 다.예 를 들 어 클 라 이언 트 가 입력application / json
을 요구 하면 오류 가 발생 했 을 때 우 리 는application / json
인 코딩 으로 응답 하 는 것 을 확보 해 야 합 니 다.HttpServletResponse
과 상호작용 을 해 야 각종 형식의 응답 체 를 실현 할 수 있다.니 가 쓰 는 프레임 이 스프링 부츠 라면우 리 는 또 그것 의 독특한 처리 방식 을 사용 할 수 있다.저급한 API 를 차단 하고 단점 도 뚜렷 해 구체 적 인 이상 을 포착 할 수 없다 는 장점 이 있다.
5.1 오류 컨트롤 러 구현
Spring Boot 는 기본적으로
/error
맵 을 제공 하여 모든 오 류 를 처리 합 니 다.Servlet 용기 에 전역 오류 페이지(Whitelabel Error Page)를 등록 하고 클 라 이언 트 를 되 돌려 줍 니 다.ErrorController 인 터 페 이 스 를 실현 하고 Bean 으로 등록 합 니 다.여 기 는 더 이상 예 를 들 지 않 는 다.참고 가능
BasicErrorController
.5.2 추가
ErrorAttributes
기본 이상 처 리 를 교체 하기 위해 ErroAttributes 형식의 Bean 을 추가 할 수도 있 습 니 다.
@Component
public class MyCustomErrorAttributes extends DefaultErrorAttributes {
@Override
public Map<String, Object> getErrorAttributes(
WebRequest webRequest, boolean includeStackTrace) {
Map<String, Object> errorAttributes =
super.getErrorAttributes(webRequest, includeStackTrace);
errorAttributes.put("locale", webRequest.getLocale()
.toString());
errorAttributes.remove("error");
//todo your business
return errorAttributes;
}
}
5.3 상속 기본 오류 컨트롤 러Spring Boot 자동 설정 은 ErrorController 인터페이스 이상 처 리 를 실현 하 는 기본 클래스 Basic ErrorController 도 제공 합 니 다.기본 값 은 text/html 형식 요청 을 처리 하 는 오류 입 니 다.이 기본 클래스 의 사용자 정의 처리 더 많은 요청 형식 을 계승 하여 공공 방법 을 추가 하고@RequestMapping 주 해 를 사용 하 는 produt 속성 지정 처리 형식 을 사용 할 수 있 습 니 다.
@Component
public class MyErrorController extends BasicErrorController {
public MyErrorController(ErrorAttributes errorAttributes) {
super(errorAttributes, new ErrorProperties());
}
@RequestMapping(produces = MediaType.APPLICATION_XML_VALUE)
public ResponseEntity<Map<String, Object>> xmlError(HttpServletRequest request) {
//todo your business
}
}
6.Spring 5 의 Response Status Exception또한 최신 스프링 5 에 서 는
ResponseStatusException
이상 을 던 져 처리 할 수 있다.좋 은 점:
우 리 는 자주 사용 되 고 자주 사용 되 지 않 는 Spring 처리 이상 방식 에 대해 정리 하고 우열 을 분석 했다.그 중에서 당신 에 게 적합 한 처리 방식 을 찾 을 수 있 을 것 이 라 고 믿 습 니 다.만약 당신 에 게 도움 이 된다 면 칭찬 을 눌 러 주세요.당신 의 격려,나의 원동력!
자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.