7. Spring MVC 고급 기술
Spring 은 이상 을 응답 으로 변환 하 는 다양한 방식 을 제공 합 니 다.
7.1.1 이상 을 HTTP 상태 코드 로 표시
기본적으로 Spring 은 자신의 이상 을 자동 으로 적당 한 상태 코드 로 바 꿉 니 다.
봄 이상
HTTP 상태 코드
BindException
400-Bad Request
ConversionNotSupportedException
500-Internal Server Error
HttpMessageNotReadableException
400-Bad Request
HttpMessageNotWriteableException
500-Internal Server Error
HttpRequestMethodNotSupportedException
405-Method Not Allowed
MethodArgumentNotValidException
400-Bad Request
MissingServletRequestParameterException
400-Bad Request
MissingServletRequestPartException
400-Bad Request
NoSuchRequestHandlingMethodException
404-Not Found
TypeMismatchException
400-Bad Request
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Spittle Not Found")
public class .....
7.2 컨트롤 러 에 알림 추가
컨트롤 러 알림 은 @ Controller Advice 주석 이 있 는 클래스 입 니 다. 이 종 류 는 다음 과 같은 방법 을 포함 합 니 다.
//
package test
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
//
@ControllerAdvice
public class AppWideExceptionHandler {
//
@ExceptionHandler(DuplicateSpittleException.class)
public String duplicateSpittleHandler() {
return "error/duplicate";
}
}
만약 어느 곳 에서 든 Duplicate Spittle Exception 을 던진다 면, Duplicate Spittle Handler 방법 으로 이상 을 처리 할 것 입 니 다.
7.5 크로스 리 셋 요청 전달 데이터
5.4 에 서 는 방향 을 바 꾸 는 기초 기능 을 말 했 고, Spring 은 또 다른 보조 기능 을 제공 했다.
Q: 방향 을 바 꾸 는 기능 을 시작 하 는 방법 은 어떻게 데 이 터 를 방향 을 바 꾸 는 목표 방법 에 보 내야 합 니까?
프로세서 방법 이 완료 되면 이 방법 이 지정 한 모델 데 이 터 는 요청 에 복사 되 고 요청 한 속성 으로 보기 로 전송 하여 렌 더 링 합 니 다.컨트롤 러 방법 과 보기 가 같은 요청 을 처리 하기 때문에 퍼 가기 에서 요청 속성 을 저장 할 수 있 습 니 다.
이상 은 요청 한 처리 내용 이지 만 방향 이 다 릅 니 다.컨트롤 러 가 되 돌아 오 는 결과 가 방향 을 바 꾸 면 원본 요청 이 끝나 고 새로운 GET 요청 이 시 작 됩 니 다.원본 요청 에 있 는 인자 도 함께 사라 집 니 다. 새로운 요청 속성 에 서 는 모델 에서 온 데이터 가 없습니다. 방법 을 통 해 가 져 온 후 방향 을 바 꾸 는 결과 에 값 을 부여 하여 새로운 요청 데이터 로 해 야 합 니 다.
데 이 터 를 전달 하 는 두 가지 방법:
첫 번 째 방법
@RequestMapping(value="/register",method=POST)
public String executeRegister(Spittr spittr,Model model) {\
spitterRepository.save(spittr);
model.addAttribute("username",spitter.getUsername());
// POJO spittr, Username, getUsername()
// 5.4
// return "redirect:/home/" + spittr.getUsername()
return "redirect:/home/{username}";
}
username 을 URL 템 플 릿 에 직접 연결 하 는 대신 자리 표시 자 로 채 워 서 자리 표시 자 에서 의 인 코딩 을 다시 바 꾸 어 안전성 을 향상 시 켰 습 니 다.
예 2:
@RequestMapping(value="/register",method=POST)
public String executeRegister(Spittr spittr,Model model) {\
spitterRepository.save(spittr);
model.addAttribute("username",spitter.getUsername());
model.addAttribute("userId",spitter.getId());
// POJO spittr, Username, getUsername()
// 5.4
// return "redirect:/home/" + spittr.getUsername()
return "redirect:/home/{username}";
}
userId 가 추가 되 었 습 니 다. 그러나 재 설정 경로 에 userId 의 자리 표시 자가 없습니다. 재 설정 하면 끝 에 불 러 옵 니 다. ID = 47 을 가정 하여 / home / lihua? userId = 47 을 생 성 합 니 다.이 url 에 대해 잘 알 고 있 습 니까?뒤의 내용 은 이렇게 덧 붙 인 것 이다.
이 방법의 한계점: 문자열 이나 숫자 등 간단 한 값 만 보 낼 수 있 고 더 복잡 한 값 을 처리 할 수 없다 는 점 이다.복잡 한 값 을 처리 하 는 것 은 플래시 방법 이 존재 하 는 의미 이다.
제2 장 방법 -- 플래시
실제 대상 등 을 보 내 려 면 Spring 은 골반 을 살아 있 는 데 이 터 를 세 션 에 재 설정 하여 플래시 속성 으로 보 내 는 기능 을 제공 합 니 다. 정의 에 따라 플래시 속성 은 다음 요청 까지 이 데 이 터 를 계속 가지 고 다 닙 니 다.RedirectAttributes 에서 플래시 속성 을 설정 하 는 방법 을 제공 합 니 다.이 모듈 은 Model 의 모든 기능 을 포함 할 뿐만 아니 라 플래시 속성 을 설정 하 는 몇 가지 방법 도 제공 합 니 다.
@RequestMapping(value="/register",method=POST)
public String executeRegister(Spittr spittr,RedirectAttributes model) {\
spitterRepository.save(spittr);
model.addAttribute("username",spitter.getUsername());
// POJO spittr, Username, getUsername()
// 5.4
// return "redirect:/home/" + spittr.getUsername();
model.addFlashAttribute("spitter",spitter);
return "redirect:/home/{username}";
}
"spitter" 는 key 이 고, 뒤에 spitter 는 값 이 며, flash 는 설정 하지 않 고 자동 으로 추정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.