레이블이 ExceptionHandler인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ExceptionHandler인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 27일 토요일

스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)

 스프링 예외처리,@ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리(자바교육학원/스프링교육학원/JAVA교육학원/Spring교육학원)


http://ojc.asia/bbs/board.php?bo_table=LecSpring&wr_id=887 


스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리

스프링 예외처리, @ExceptionHandler,@ControllerAdvice를 이용한 컨트롤러 예외처리컨트롤러 기반 예외처리컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다. 스프링은 컨트롤러 안에 @ExceptionHand

ojc.asia


https://www.youtube.com/watch?v=OXnif975EoQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=12&t=11s 


https://www.youtube.com/watch?v=YlXpUGYXrKQ&list=PLxU-iZCqT52B7oCYJltUT2-kBzckdr5vp&index=10 

 

  • 컨트롤러 기반 예외처리

컨트롤러 내부 메소드 위에 @ExceptionHandler를 사용하면 된다.  스프링은 컨트롤러 안에 @ExceptionHandler를 사용한 메소드가 존재하면 그 메소드가 컨트롤러 내부의 예외를 처리하도록 하며 @ExceptionHandler의 인자로 들어오는 예외가 발생하는 경우에 해당 메소드가 실행된다.



@Controller

public class EmpController {

@RequestMapping(value="/emp/{empno}", method=RequestMethod.GET)

public String getEmp(@PathVariable("empno") int empno, Model model) {

if(empno==null) throw new EmpNotFoundException(id);

else {    ...... }

}

@ExceptionHandler(EmpNotFoundException.class) //EmpNotFoundException에 대한 예외처리 메소드

public ModelAndView exHandler(HttpServletRequest request, Exception ex){

ModelAndView modelAndView = new ModelAndView();

modelAndView.addObject("exception", ex);

modelAndView.addObject("url", request.getRequestURL());

modelAndView.setViewName("error");

return modelAndView;

}

}



  • 글로벌 예외처리

@ExceptionHandler  : 스프링 @MVC에서 에러나 예외를 처리하기 위한 특별한 방법을 제공하는데  @ExceptionHandler 어노테이션을 이용하면 된다. 스프링 컨트롤러에서 정의한 메소드에서 기술한 예외가 발생되면 자동으로 받아낼 수 있다. 이를 이용하여 컨트롤러에서 발생하는 예외를 View단 JSP등으로 보내서 처리할 수 있다.

 

@ControllerAdvice : @ControllerAdvice는 스프링3.2 이상에서 사용가능하며  @Controller 나 스프링 4.0이상에서 지원하는 @RestController 에서 발생하는 예외 등을 catch하는 기능을 가지고 있다. 클래스 위에 @ControllerAdvice를 붙이고 어떤 예외를 잡아낼 것인지 내부 메소드를  선언하여 메소드 상단에 @ExceptionHandler(예외클래스명.class)를 기술한다. 스프링4.0이상에서는 특정한 컨트롤러만 지정해서 캐치할 수 있다.

 

STS에서

File >> New >> Spring Legacy Project

Project Name : springmvcexception

Spring MVC Project 선택

다음 화면의 top level package에서 a.b.springmvcexception 입력


[pom.xml]

Spring Framework 버전이 4.X 아래라면 수정하자.

<properties>

……

<org.springframework-version>4.2.4.RELEASE</org.springframework-version>

……

</properties>


[HomeController.java]

package a.b.springmvcexception;


import java.io.IOException;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;


@Controller

public class HomeController {

@RequestMapping(value = "/")

public String hello() throws IOException {

// 뷰이름 이름, hello.jsp 호출

return "home";

}


@RequestMapping(value = "/test")

public String test() throws IOException {

{

throw new IOException("occured IOException...");

}

}

}


[ExceptionControllerAdvice.java]


package a.b.springmvcexception;


import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.servlet.ModelAndView;


@ControllerAdvice

public class ExceptionControllerAdvice {


@ExceptionHandler(Exception.class)

public ModelAndView exception(Exception e) {

ModelAndView mav = new ModelAndView("exception");

mav.addObject("name", e.getClass().getSimpleName());

mav.addObject("message", e.getMessage());


return mav;

}

}


[ webapp/WEB-INF/views/home.jsp]


<html>

<head>

<title>Spring MVC Exception Handling</title>

</head>

<body>

<h1>Spring MVC Exception Handling</h1>

<a href="/springmvcexception/test">Click here to test Exception handling</a>

</body>

</html>


[ webapp/WEB-INF/views/exception.jsp]

<html>

<head>

<title>Spring MVC Exception example</title>

</head>

<body>

<h1>Error Handing Page</h1>

<b>${name}</b>:  ${message}

</body>

</html>


[실행]

프로젝트에서 우쪽 마우스 버튼 -> Run as -> Run On Server 클릭 후 STS에 기본적으로 내장되어 있는 Pivotal tc Server를 선택하고 Finish를  클릭하여 실행하자

http://localhost:8080/springmvcexception/



"Click here to test Exception handling "를 클릭하자

exception.jsp에서 예외를 받아서 출력한다.

 

  • Spring4 @RestController 컨트롤러 기반 예외처리

 

@RestController  @RequestMapping("/emp")

public class EmpController {

@ExceptionHandler(EmpNotFoundException.class)  //EmpNotFoundException 예외처리용

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());

error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

@RequestMapping("/get")

public Emp getEmp(@RequestParam(value="empno") String empno) {

if (empno == null) throw new EmpNotFoundException(empno);

......

return emp;        } }


public class EmpNotFoundException extends RuntimeException {

public EmpNotFoundException(String empno){

super(empno +" not found!");

}

}

http://localhost:8080/emp/get?empno=9999

존재하지 않는 사원이라면 오류는 JSON 형태로 리턴된다.

{"status":400,"message":"9999 not found!","url":"http://localhost:8080/emp/get/emperror/"}

 

  • Spring4 @RestController 글로벌 예외처리

 

@RestController

@RequestMapping("/emp")

class EmpApiController {

@RequestMapping(value = "{empno}", produces = "application/json")

@ResponseStatus(value = HttpStatus.OK)

Emp getEmp(@PathVariable Long empno) {

if (empno == null) throw new EmpNotFoundException(empno);    }

}

@ControllerAdvice(annotations = RestController.class)

class ExceptionHandlerAdvice {

@ExceptionHandler(value = EmpNotFoundException.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ResponseBody

public ErrorDetail myError(HttpServletRequest request, Exception exception) {

ErrorDetail error = new ErrorDetail();

error.setStatus(HttpStatus.BAD_REQUEST.value());

error.setMessage(exception.getLocalizedMessage());     error.setUrl(request.getRequestURL().append("/emperror/").toString());

return error;

}

}



스프링예외, 스프링교육, 스프링학원, 자바교육, 자바학원, ExceptionHandler,ControllerAdvice,자바교육학원,스프링교육학원,JAVA교육학원,Spring교육학원



#스프링예외, #스프링교육, #스프링학원, #자바교육, #자바학원, #ExceptionHandler,#ControllerAdvice,#자바교육학원,#스프링교육학원,#JAVA교육학원,#Spring교육학원
 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...