computer_study

[Spring] 14. MVC4 : 날짜 값 변환, @PathVariable, 익셉션 처리 본문

스터디/스프링5 프로그래밍 입문

[Spring] 14. MVC4 : 날짜 값 변환, @PathVariable, 익셉션 처리

knowable 2022. 5. 23. 04:36

1. 프로젝트 준비

2. 날짜를 이용한 회원 검색 기능

3. 커맨드 객체 Date 타입 프로퍼티 변환 처리: @DateTimeFormat

  • @DateTimeFormat 애노테이션이 있다면 지정한 형식을 이용해 문자열을 LocalDateTime 타입으로 변환한다.
import org.springframework.format.annotation.DateTimeFormat;

public class ListCommand{
    @DateTimeFormat(pattern = "yyyyMMddHH")
    private LocalDateTime from;
}
  • 잘못된 형식 입력 시 400에러가 발생하기에, 에러핸들링이 필요하다.

4. 변환 처리에 대한 이해

@DateTimeFormat 애노테이션 사용 시 WebDataBinder가 문자열을 LocalDateTime타입으로 변환해준다.

WebDataBinder는 ConversionService에 그 역할을 위임하고 DefaultFormattingConversionService가 타입 변환을 실행한다.

5. MemberDao 클래스 중복 코드 정리 및 메서드 추가

6. @PathVariable을 이용한 경로 변수 처리

  • 경로의 일부가 고정되어 있지 않고 달라질 때 사용할 수 있는 것
...
import org.springframework.web.bind.annotation.PathVariable;
...

    @GetMapping("/members/{id}")
    public String detail(@PathVariable("id"))Long memId, Model model{
     ...
    }
    // {id}값을 @PathVariable("id")가 붙어있는 memId에 전달

7. 컨트롤러 익셉션 처리하기

@ExceptionHandler 애노테이션

같은 컨트롤러에서 @ExceptionHandler 애노테이션을 적용한 메서드가 존재하면 그 메서드가 익셉션을 처리한다.

(컨트롤러에서 발생한 익셉션을 직접 처리하고 싶을 경우 사용)

import org.springframework.beans.TypeMismatchException;
import org.springframework.web.bind.annotation.ExceptionHandler;

...

    @ExceptionHandler(TypeMismatchException.class)
    public String handleTypeMismatchException(){ // 해당 익셉션이 발생하면 메서드 실행
        return "member/invalidId";
    }
    
    @ExceptionHandler(MemberNotFoundException.class)
    public String handleNotFoundException(){
        return "member/noMember";
    }
...

 

@ControllerAdvice를 이용한 공통 익셉션 처리

다수의 컨트롤러에서 동일한 타입의 익셉션이 발생하는 경우

...
// spring 패키지와 그 하위 패키지에 속한 컨트롤러 클래스를  위한 공통기능 정의
// 적용 클래스가 동작하기 위해선 해당 클래스를 빈으로 등록해야한다.
@ControllerASdvice("spring") 
public class CommonExceptionHandler{
    @ExceptionHandler(RuntimeException.class)
    public String handle RuntimeException(){ // 익셉션발생 시 해당 메서드로 처리
        return "error/commonException";
    }
}

 

@ExceptionHandler 적용 메서드의 우선 순위

컨트롤러 클래스에 적용된  @ExceptionHandler 메서드 > @ControllerAdvice 클래스에 있는 @ExceptionHandler 메서드

(컨트롤러 클래스에 적용된  @ExceptionHandler 메서드를 우선 검색하기에)

 

@ExceptionHandler 애노테이션 적용 메서드의 파라미터와 리턴 타입

  • 파라미터
    • HttpServletRequest, HttpServletResponse, HttpSession
    • Model
    • 익셉션
  • 리턴타입
    • ModelAndView
    • String (뷰 이름)
    • (@ResponseBody 애노테이션을 붙인 경우)임의 객체
    • ResponseEntity
Comments