SpringMVC@Controller Advice 사용 장면

이 글 은 주로 SpringMVC@Controller Advice 의 사용 장면 을 소개 하 였 으 며,예시 코드 를 통 해 매우 상세 하 게 소개 하 였 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 므 로 필요 한 분 들 은 참고 하 시기 바 랍 니 다.
@Controller Advice,많은 초보 자 들 이 이 주 해 를 들 어 본 적 이 없 을 것 입 니 다.실제로 이것 은 매우 유용 한 주해 입 니 다.말 그대로 강 화 된 Controller 입 니 다.이 Controller 를 사용 하면 세 가지 기능 을 실현 할 수 있 습 니 다.
전역 이상 처리
전체 데이터 바 인 딩
전체 데이터 예비 처리
이 세 가지 기능 을 유연 하 게 사용 하면 많은 작업 을 간소화 할 수 있 습 니 다.주의해 야 할 것 은 스프링 MVC 가 제공 하 는 기능 입 니 다.스프링 부츠 에서 직접 사용 할 수 있 습 니 다.다음은 각각 볼 수 있 습 니 다.
전역 이상 처리
@Controller Advice 를 사용 하여 전역 이상 처 리 를 실현 합 니 다.클래스 만 정의 하고 이 주 해 를 추가 하면 다음 과 같이 정의 할 수 있 습 니 다.

@ControllerAdvice
public class MyGlobalExceptionHandler {
  @ExceptionHandler(Exception.class)
  public ModelAndView customException(Exception e) {
    ModelAndView mv = new ModelAndView();
    mv.addObject("message", e.getMessage());
    mv.setViewName("myerror");
    return mv;
  }
}
이 클래스 에서 여러 가지 방법 을 정의 할 수 있 습 니 다.서로 다른 방법 으로 서로 다른 이상 을 처리 할 수 있 습 니 다.예 를 들 어 빈 지침 을 전문 적 으로 처리 하 는 방법,배열 의 경 계 를 뛰 어 넘 는 방법 등 도 위 코드 와 같이 한 방법 에서 모든 이상 정 보 를 처리 할 수 있 습 니 다.
@Exception Handler 주 해 는 이상 한 처리 유형 을 가리 키 는 데 사 용 됩 니 다.즉,여기 가 Nullpointer Exception 으로 지정 되면 배열 의 경계 이상 이 이 방법 에 들 어 오지 않 습 니 다.
전역 데이터 바 인 딩
전역 데이터 바 인 딩 기능 은 초기 화 된 데이터 작업 을 할 수 있 습 니 다.우 리 는 일부 공공 데 이 터 를@Controller Advice 주 해 를 추가 한 클래스 에 정의 할 수 있 습 니 다.그러면 모든 Controller 의 인터페이스 에서 이 데 이 터 를 방문 할 수 있 습 니 다.
사용 절 차 는 먼저 전역 데 이 터 를 정의 합 니 다.다음 과 같 습 니 다.

@ControllerAdvice
public class MyGlobalExceptionHandler {
  @ModelAttribute(name = "md")
  public Map<String,Object> mydata() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("age", 99);
    map.put("gender", " ");
    return map;
  }
}
@ModelAttribute 주석 을 사용 하여 이 방법의 반환 데 이 터 를 표시 하 는 것 은 전역 데이터 입 니 다.기본 적 인 상황 에서 이 전역 데이터 의 key 는 되 돌아 오 는 변수 이름 입 니 다.value 는 방법 으로 값 을 되 돌려 주 는 것 입 니 다.물론 개발 자 는@ModelAttribute 주석 의 name 속성 을 통 해 key 를 다시 지정 할 수 있 습 니 다.
정의 가 완료 되면 모든 Controller 인터페이스 에서 정 의 된 데 이 터 를 얻 을 수 있 습 니 다.

@RestController
public class HelloController {
  @GetMapping("/hello")
  public String hello(Model model) {
    Map<String, Object> map = model.asMap();
    System.out.println(map);
    int i = 1 / 0;
    return "hello controller advice";
  }
}
전역 데이터 예비 처리
저 는 두 개의 실체 류 가 있 는 것 을 고려 하여 Book 과 Author 는 다음 과 같이 정의 합 니 다.

public class Book {
  private String name;
  private Long price;
  //getter/setter
}
public class Author {
  private String name;
  private Integer age;
  //getter/setter
}
이때,만약 내 가 데이터 추가 인 터 페 이 스 를 정의 한다 면 다음 과 같다.

@PostMapping("/book")
public void addBook(Book book, Author author) {
  System.out.println(book);
  System.out.println(author);
}
이 럴 때 추가 작업 에 문제 가 있 습 니 다.두 실체 류 는 모두 name 속성 이 있 기 때문에 전단 에서 전달 할 때 구분 할 수 없습니다.이 때@Controller Advice 의 전역 데이터 예비 처 리 를 통 해 이 문 제 를 해결 할 수 있 습 니 다.
해결 절 차 는 다음 과 같다.
1.인터페이스 에 있 는 변수 에 별명 붙 이기

@PostMapping("/book")
public void addBook(@ModelAttribute("b") Book book, @ModelAttribute("a") Author author) {
  System.out.println(book);
  System.out.println(author);
}
2.요청 데이터 전처리
@Controller Advice 에 표 시 된 클래스 에 다음 코드 를 추가 합 니 다.

@InitBinder("b")
public void b(WebDataBinder binder) {
  binder.setFieldDefaultPrefix("b.");
}
@InitBinder("a")
public void a(WebDataBinder binder) {
  binder.setFieldDefaultPrefix("a.");
}
@InitBinder("b")주 해 는 이 방법 이 Book 과 관련 된 인 자 를 처리 하 는 데 사 용 됩 니 다.방법 에 서 는 인자 에 b 접 두 사 를 추가 합 니 다.즉,요청 인 자 는 b 접두사 가 있어 야 합 니 다.
3.요청 보 내기
보 내 기 를 요청 할 때 서로 다른 대상 의 매개 변수 에 서로 다른 접 두 사 를 추가 하면 매개 변수의 구분 을 실현 할 수 있 습 니 다.

총결산
이것 이 바로 송 형 이 모두 에 게 소개 한@Controller Advice 의 몇 가지 간단 한 용법 입 니 다.이런 점 들 은 전통 적 인 SSM 프로젝트 에서 도 사용 할 수 있 고 Spring Boot+Spring Cloud 마이크로 서비스 에서 도 사용 할 수 있 습 니 다.문제 가 있 으 면 함께 토론 하 시기 바 랍 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기