본문 바로가기

스프링 웹 MVC

(9)
핸들러 메서드: MultipartFile, ResponseEntity MultipartFile - 파일 업로드 시 사용하는 메서드 아규먼트 - MultipartResolver 빈이 설정되어 있어야 사용할 수 있다. (스프링 부트 자동 설정이 해 줌) MultipartAutoConfiguration을 확인해보면 스프링 부트가 빈으로 등록해준 것을 알 수 있다. 추가 설정을 원한다면 applicaiton.properties에서 spring.servlet.mutipart.~~으로 할 수 있다. 예제 resource -> template -> files에 index.html을 생성한다. 주황 박스 부분은 타임리프 if 문을 이용해 message가 존재하면 message를 보여주는 것이고 빨간 박스 부분이 실제로 파일을 전송하기 위한 form이다. enctype을 multipart..
핸들러 메서드: RedirectAttributes, FlashAttributes Redirect URI 매개변수 기존 스프링 Web MVC에서는 model에 기본 primitive type 데이터를 넣고 redirect 하게 되면 URI 쿼리 매개변수에 추가된다. 하지만 스프링 부트는 기본 설정이 비활성화되어 있다. application.properties에 위와 같이 ignore-default-model-on-redirect를 false로 두면 URI 쿼리 매개변수에 추가가 된다. ​이렇게 redirect시 모델에 들어간 primitive type의 데이터들이 URI 매개변수에 추가된 것을 알 수 있다. 하지만 이 설정을 켜면 모든 경우에 적용이 되기 때문에 특정 값들만 URI 매개변수에 추가하고 싶으면 RedirectAttribute를 사용하면 된다. RedirectAttribu..
핸들러 메서드: @SessionAttributes, @SessionAttribute Session은 여러 화면이나 여러 요청에서 사용해야 하는 객체를 공유할 때 사용할 수 있다, HttpSession사용 HttpSession을 사용하여 직접 session을 추가할 수 있다. 테스트를 통해 세션정보를 확인해보면 세션이 정상적으로 저장된 것을 알 수 있다. @SessionAttributes - HttpSession보다 조금 더 추상화된 방법으로 아래와 같이 @SessionAttributes를 사용한다. model.addAttribute의 attributeName이랑 @SessionAttributes의 괄호 안의 값이 같으면 model에 추가될 때 자동으로 세션으로 넣어준다. ​위와 동일한 테스트를 돌려보면 결과가 똑같은 것을 알 수 있다. 세션 처리 이렇게 추가한 세션을 @ModelAttr..
Spring MVC 미디어타입, 헤더, 매개변수 매핑 요청 매핑하기 미디어 타입과 헤더, 매개변수에 맞게 요청을 매핑할 수 있다. 원하는 타입의 요청만 처리하기 JSON 요청만 처리하고 싶을 경우 Annotaiton에 consumes 설정으로 원하는 타입을 설정할 수 있다. VALUE는 String을 리턴한다는 의미이다. 테스트 코드에서 contentType을 JSON으로 설정하고 테스트하면 테스트가 성공한다. APPLICATION_JSON, APPLICATION_JSON_VALUE 등 JSON으로만 설정하면 모두 가능하다. Content Type을 주지 않을 경우 Content-Type 헤더를 설정하지 않고 테스트 시 415(UnsupportedMediaType) 상태 응답이 발생한다. 원하는 타입으로 응답하기 응답을 TEXT로 할 경우 테스트에서 Acc..
Spring MVC HTTP Method(@RequestMapping), URL 패턴 HTTP Method와 URL 패턴 Spring Web MVC에서 사용하는 HTTP Method 매핑 방법과 URL 패턴에 대해 알아본다. 먼저 자주 사용하는 HTTP Method에 대해서 알아보자. HTTP Method GET 클라이언트가 서버의 리소스를 요청할 때 주로 사용하는 메서드이다. 브라우저에 기록이 남으며 URL에 전송하는 데이터가 표시되므로 민감한 데이터를 보내면 안 된다. 멱등성 O, 캐시 가능 HEAD GET 요청과 같지만 응답에 본문이 없고 헤더만 존재한다. 헤더를 통해 본문 정보를 유추할 때나 응답 상태 코드를 확인만 필요할 때도 유용하다. 멱등성 O, 캐시 가능 POST 클라이언트가 서버의 리소스를 수정하거나 새로 만들 때 사용한다. 서버에 리소스를 수정하거나 새로 만들 때 보내는..
전역 컨트롤러: @(Rest)ControllerAdvice @(Rest)ControllerAdvice 예외 처리, 바인딩 설정, 모델 객체를 모든 컨트롤러 전반에 걸쳐 적용하고 싶은 경우에 사용한다. 예외를 처리하는 @ExceptionHandler와 함께 사용하면 전반에 걸친 예외처리가 가능하다. 바인딩 또는 검증을 설정할 수 있는 @InitBinder와 함께 사용하면 전반에 걸친 바인딩 설정이 가능하다. 모델 정보를 초기에 초기화할 수 있는 @ModelAttribute와 함께 사용하면 전반에 걸친 모델 정보 설정이 가능하다. 예제 이전 게시글들에서 작성한 @InitBinder, @ModelAttribute, @ExceptionHandler를 @ControllerAdivice로 정의한 BaseController에 작성하였다. 빨간 줄처럼 @ControllerAd..
예외 처리 핸들러: @ExceptionHandler @ExceptionHandler 어떤 요청을 처리하다가 예외들이 발생했을 때 직접 정의한 핸들러를 통해 예외를 처리해서 응답할 수 있다. 예제 RuntimException을 상속받은 EventException을 하나 만들었다. 그리고 예외가 발생했을 때 보여줄 페이지를 만든다. 빨간 박스의 message에 예외 메시지를 담아 보여줄 것이다. 컨트롤러에서 @ExceptionHandler를 사용한 메서드를 하나 작성한다. 메서드 파라미터에 원하는 Exception을 넣으면 예외 처리가 가능하다. EventException을 파라미터로 넣었으므로 EventException 발생 시 eventErrorHandler가 동작하여 message를 담아 줄 것이다. 그리고 위에서 작성한 error.html로 view를..
데이터 바인더: @InitBinder @InitBinder 특정 컨트롤러에서 바인딩 또는 검증 설정을 변경하고 싶을 때 사용한다. 바인딩 설정 event의 id값은 데이터 바인더를 통해 받아오지 않게 하기 이벤트 클래스와 resources/templates/events/ 에 form.html을 이렇게 작성하였다. 모델을 통해 뷰에게 넘겨주고 그것을 Postmapping으로 받아오는 컨트롤러를 작성하였다. 디버그 모드로 웹을 띄우고 event값을 확인하면 모든 값이 제대로 전달된 것을 알 수 있다. 데이터 바인더 적용 @InitBinder를 이용해 데이터 바인더를 적용한 후 id를 setDisallowedFields에 추가한다. 그리고 동일하게 디버그 모드로 웹을 띄워서 데이터를 전송해보면 id값은 걸러진 것을 알 수 있다. 아래와 같이 In..