7/16 날짜 값 변환, 예외

박세현·2024년 7월 16일

Spring

목록 보기
11/15
post-thumbnail

1. 날짜 값 변환

@DateTimeFormat

  • LocalDate, LocalTime, LocalDateTime ..
  • 형식이 일치 하지 않으면 예외 발생
    • 메세지 코드 typeMismatch

ㄴ 이렇게 다양한 형식의 문자열 데이터(날짜데이터)가 들어오면 어떻게 받아야 하지?
ㄴ 커맨드 객체에는 로컬데이트타임이라고 설정했는데
ㄴ 형식을 알려주면 됨 = @DateTimeFormat

예시) 회원조회(언제 가입했는지, 종료했는지)_날짜 검색 기능

ㄴ 커맨드 객체통해 db 조회

ㄴ 양식 연동하는데 필요한거 넣음
ㄴ 이제 list양식 구성하러 갈거임

ㄴ 모르는 형식이면 이렇게 오류 뜸

ㄴ 모르는 형식이면 이렇게 오류 뜸
ㄴ 형식을 그럼 알려주면 됨

ㄴ 형식 알려줌

ㄴ 이젠 오류 안뜸

예시) 타입미스매치_사용자 친화적 오류 연동

ㄴ 밸리드 : 검증이 필요한 형태이다 알려주기
ㄴ 에러객체 가 있어야 템플리쪽에 연동이 됨
ㄴ 바인드리졸트 써도 ㅇㅋㅇㅋ

ㄴ 날짜 형식 지정한걸로 기입 안해서 뜨는 오류가 나옴
ㄴ 기본 에러메세지가 나옴
ㄴ 에러 메세지 사용자 친과적으로 설정해주러 갈거임

ㄴ 커맨듣객체 오류 코드 범위 한정함

2. @PathVariable : 경로 변수

  • 쿼리스트링 : 커맨드객체 혹은 리퀘스트 파람 통해서 쿼리스트링 가져 올 수 있음
  • 경로변수 : 경로변수는 @PathVariable 통해서 가져올 수 있음

    ㄴ 이게 경로 변수

    ㄴ 이게 경로변수

예시) 경로변수

ㄴ 자동으로 형변환도 해줌

ㄴ 경로변수

ㄴ @PathVariable : 애도 값이 없으면 오류가 발생한다

ㄴ 값이 없는걸로 검색하니

ㄴ 이렇게 뜸
ㄴ 음 오류가 나와야 하는데...

ㄴ 반환값을 뷰로 하지 않고 그냥 void로 함

예시)

ㄴ 음 오류뜨네

ㄴ 리콰이얼드 : 폴스
ㄴ 이렇게 해주면

ㄴ 없으면 null로 값을 넣어줌
ㄴ 오류 안뜸

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

1) @ExceptionHandler

  • 발생 예외를 정의
  • 예외발생시 특정 페이지를 노출
  • 메서드에 자동 주입
    • 발생한 예외 객체
    • Model
    • HttpServletRequest
    • HttpServletResponse
    • HttpSession

참고) 스프링부트

  • el식 속성으로 이미 추가되어 있는 것들
    • status : HTTP 상태 코드
    • error : 에러코드
    • path : 예외가 발생한 URI
    • exception :
    • message :
    • timestamp
  • 그럼 스프링에선 어떻게 가져오지?
    • 스테이터스 : resp객체
    • 패스 : 리퀘스트객체

예시) 사용자 친화적 에러페이지 만들기_@ExceptionHandler

ㄴ 일부러 /member/list 예외발생시킴

ㄴ 에러페이지 뷰 구성
ㄴ 에러페이지는 보통 공통적인 템플릿
ㄴ 에러가 발생하면 모두 여기로 유입되도록할거임

ㄴ 발생한 예외의 원인을 알아야지
ㄴ BadRequestException e : 발생한 예외가 여기 담겨지게 됨

예시)

ㄴ 여기로 유입 안되는 모습

ㄴ 이렇게 하면 유입됨

ㄴ 이렇게도 유입됨
ㄴ 근데 ㄱㅊ아 모든 예외가 유입되도록 해주자

ㄴ 다형성
ㄴ 모든 예외가 유입됨

2) @ControllerAdvice

  • 컨트롤러의 공통적인 값을 유지 혹은 처리를 할 때 사용
  • 컨트롤러의 공통적인 처리
  • 공통 값 유지 -> @ModelAttribute
  • 공통 에러 페이지 처리도 이걸 활용함 -> @ExceptionHandler
    • AOP와도 관련이 된다
  • ResponseEntity : 응답상태코드
  • 모델엔뷰 :

예시) 공통적인 에러처리

ㄴ 공통적인 컨트롤러 어드바이스가 적용될 범위 설정
ㄴ 패키지 범위 설정
ㄴ 배열이네? 여러개도 설정 가능하다

ㄴ 클래스형태로도 가능

ㄴ 에러를 컨트롤러랑 @ControllerAdvice 둘다 적용 시
ㄴ 우선순위는 컨트롤러쪽이 더 높음

ㄴ 우선순위 쳌

예시)

ㄴ 음 에러인데 상태코드 정상이면 안되지
ㄴ 400으로 떠야하는데

ㄴ 모든 예외를 커먼익셉션의 하위로 정의할거

ㄴ 응답코드 바뀜

참고)
컨트롤러에서 공통으로 처리
-> 핸들러 인터셉터

profile
귤귤

0개의 댓글