@Controller
public class SimpleController {
// ...
@ExceptionHandler
public ResponseEntity<String> handle(IOException ex) {
// ...
}
}
@Controller
public class SimpleController {
// ...
@ExceptionHandler({FileSystemException.class, RemoteException.class})
public ResponseEntity<String> handle(Exception ex) {
// ...
}
}
@ExceptionHandler({FileSystemException.class, RemoteException.class})
@ControllerAdvice
는 @Controller
와 handler
에서 발생하는 에러들을 모두 잡아줌**@ControllerAdvice**
public class ExceptionHandlers {
**@ExceptionHandler(FileNotFoundException.class)**
public ResponseEntity handleFileException() {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
}
@ControllerAdvice
는 모든 에러를 잡아줌애노테이션
@ControllerAdvice(annotations = RestController.class)
public class ExampleAdvice1 {}
basePackages, basePackagesClasses
@ControllerAdvice("org.example.controllers")
public class ExampleAdvice2 {}
assignableTypes
@ControllerAdvice(assignableTypes = {ControllerInterface.class, AbstractController.class})
public class ExampleAdvice3 {}
@ControllerAdvie
인터페이스@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
**@Component**
public @interface ControllerAdvice {
// ...
}
**@RestControllerAdvice
는 @ControllerAdvice
와 @ResponseBody
를 가지고 있음**@ControllerAdvice
와 동일한 역할을 수행하고, @ResponseBody
를 통해 객체를 리턴할 수 있음@RestControllerAdvice
인터페이스@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
**@ControllerAdvice**
**@ResponseBody**
public @interface RestControllerAdvice {
// ...
}
@ControllerAdvice
@Component
애노테이션을 가지고 있음 → 컴포넌트 스캔을 통해 스프링 빈으로 등록됨@RestControllerAdvice
@ControllerAdvice
와 @ResponseBody
애노테이션으로 이루어져 있음 → HTML 뷰 보다는 Response body로 값을 리턴할 수 있음참고 페이지