카테고리 없음

스프링 -> JSP 변환 흐름도

chanwoo23 2025. 4. 10. 17:28

✅ 전체 시스템 요약: 구조도

[사용자 입력 (HTML form)]
→ Controller (UrlEncodedController)
→ 유효성 검사: 어노테이션 + Validator
→ 유효하면 DTO 생성 → 결과 JSP 응답
→ 오류가 있으면 폼 JSP 다시 응답

또는 REST API의 경우:

[클라이언트 JSON 요청 (Postman 등)]
→ REST Controller (RestApiController)
→ JSON → Java 객체 바인딩
→ 응답 DTO 반환 → JSON 응답


✅ 흐름 1: HTML form → UrlEncodedController

  1. 사용자가 form 입력 후 제출

<form method="post" action="/form"> <input name="userId" value="GMhong" /> ... </form>

  1. 컨트롤러에서 받음

@PostMapping
public String form(@Valid UrlEncodedForm form, BindingResult bindingResult, Model model)

  • @Valid → DTO 내부 어노테이션(@NotBlank 등) 자동 검사
  • @InitBinder → UrlEncodedValidator도 함께 실행됨
  1. 에러 검사

if (bindingResult.hasErrors()) {
return "spring/form";
}

  1. 에러 없으면 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 변환