javascript가 뷰에서 사용되는 json 오류 객체를 생성하는 예외 처리기가 있습니다.Spring @ExceptionHandler - @RequestMapping만을 생성하는 json에 적용
@ControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public final JsonResponse<Void> handleJsonException(
final Exception e,
final HttpServletRequest request,
final HttpServletResponse response) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return new ErrorJsonResponse(e);
}
}
일반 게시 (비 json) 요청에 대해이 메서드를 실행하지 않으려합니다. 그래서 WEB.XML 오류 페이지로 구성된 이런 종류의 예외를 처리하고 싶습니다.
<error-page>
<error-code>500</error-code>
<location>/500</location>
</error-page>
json을 반환하는 @RequestMapping 메서드에서 명시 적으로 생성 값을 설정합니다.
@RequestMapping(value = "/dosomething",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
생산 콘텐츠 유형에 따라 특정 예외 처리기를 사용하려면 어떻게해야합니까?
스프링'@ ControllerAdvice'는 400, 401 등의 HTTP 오류 유형을 처리하지 못합니다. 한 번 이러한 문제가 있지만 URL 기반 패턴을 뒤집을 수있었습니다 (모든 JSON 요청 '/ api' 컨텍스트로 호출되었습니다). web.xml의 위치를'@ Controller'로 리다이렉션하고 요청에 대한 정보를 파싱하려고 시도하면 그 후에 @ControllerAdvice'를 잡을 특정 예외가 발생합니다. –
ExceptionHandler가 컨트롤러를 throw하는 모든 예외를 처리합니다. 따라서 볼 수있는 유일한 방법은 응용 프로그램 내부에서 오류 페이지를 이동하고 ExceptionHandler 메서드에서 반환 할 페이지를 선택하는 것입니다. 이를 위해 HttpServletRequest를 사용할 수 있습니다. – mvb13