SpringMVC@Controller Advice 사용 장면
4543 단어 springmvccontrolleradvice
@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 마이크로 서비스 에서 도 사용 할 수 있 습 니 다.문제 가 있 으 면 함께 토론 하 시기 바 랍 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.