스프링 -> JSP 변환 흐름도
✅ 전체 시스템 요약: 구조도
[사용자 입력 (HTML form)]
→ Controller (UrlEncodedController)
→ 유효성 검사: 어노테이션 + Validator
→ 유효하면 DTO 생성 → 결과 JSP 응답
→ 오류가 있으면 폼 JSP 다시 응답
또는 REST API의 경우:
[클라이언트 JSON 요청 (Postman 등)]
→ REST Controller (RestApiController)
→ JSON → Java 객체 바인딩
→ 응답 DTO 반환 → JSON 응답
✅ 흐름 1: HTML form → UrlEncodedController
- 사용자가 form 입력 후 제출
<form method="post" action="/form"> <input name="userId" value="GMhong" /> ... </form>
- 컨트롤러에서 받음
@PostMapping
public String form(@Valid UrlEncodedForm form, BindingResult bindingResult, Model model)
- @Valid → DTO 내부 어노테이션(@NotBlank 등) 자동 검사
- @InitBinder → UrlEncodedValidator도 함께 실행됨
- 에러 검사
if (bindingResult.hasErrors()) {
return "spring/form";
}
- 에러 없으면 DTO 생성 → JSP로 결과 출력
UrlEncodedDto dto = new UrlEncodedDto(...);
model.addAttribute("dto", dto);
return "spring/result";
✅ 흐름 2: 예외 발생 → WebExceptionAdvice 처리
예외 예시:
@GetMapping("error")
public String error() {
throw new WebException(ResponseCode.BAD_REQUEST);
}
예외 처리기 작동:
@ExceptionHandler(WebException.class)
public String webExceptionHandler(WebException ex, Model model) {
model.addAttribute("message", ex.code().message());
return "error/redirect";
}
- 에러 메시지를 모델에 담고 → redirect.jsp 로 이동
✅ 흐름 3: REST API 요청 → RestApiController
요청 예시:
POST /api/test
{
"id": 1,
"email": "test@test.com"
}
컨트롤러 메서드:
@GetMapping("test")
public RestPayload test(@RequestBody RestForm form)
- @RequestBody → JSON을 Java 객체로 바인딩
- 처리 후 RestPayload 객체를 리턴
응답 예시 (자동 변환된 JSON):
{
"id": 1,
"email": "aaa@aaa",
"createdAt": "2025-04-10T20:15:35.487+09:00",
"timestamp": 1744241735
}
이 JSON 변환은 JacksonConfig에서 등록한 ObjectMapper가 처리함
✅ 클래스 관계 요약
클라이언트 JSON
→ @RequestBody → RestForm 객체
→ 처리
→ RestPayload 객체 리턴 → JSON 응답
✅ 역할별 정리
UrlEncodedForm: 사용자 입력을 담는 DTO, 유효성 어노테이션 포함
UrlEncodedValidator: 사용자 정의 유효성 검사기 (예: GM으로 시작 금지)
UrlEncodedController: 폼 처리, 검증, JSP 전달
WebExceptionAdvice: 예외 발생 시 에러 메시지와 함께 JSP 이동
RestApiController: JSON 기반 API 처리
JacksonConfig + ObjectMapper: JSON ↔ Java 객체 자동 변환
RestForm, RestPayload: REST API용 요청/응답 DTO
✅ 전체 흐름 도식 요약
[1] 사용자 form 입력
→ Controller
→ @Valid + Validator → 검증
→ 오류 있으면 → form.jsp
→ 성공 시 → DTO 생성 → result.jsp
[2] 예외 발생
→ WebExceptionAdvice 작동
→ 에러 메시지 담고 → redirect.jsp
[3] JSON 요청 (Postman 등)
→ RestController
→ @RequestBody로 객체 바인딩
→ 응답 DTO → 자동 JSON 변환