본문 바로가기

스프링/스프링 MVC

(12)
핸들러 메서드: 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 @ModelAttribute, @Valid, @Validated 핸들러 메서드인 @ModelAttribute, @Valid, @Validated에 대해 알아본다. @ModelAttribute URI 패스, 요청 , 세션 등 에 있는 단순 타입 데이터를 복합 타입 객체로 받아오거나 해당 객체를 새로 만들 때 사용할 수 있다. @ModelAttribute를 이용하면 객체로 데이터를 받아올 수 있다. param에 name, limit을 담아 전송한다. @ModelAttribute는 그 값들을 Event 객체에 매핑해준다. name과 limit이 정상적으로 전송되어 Event 객체로 변환된 것을 알 수 있다. param으로만 데이터를 전송했지만 URI 패스, 세션 등에도 똑같이 적용된다. @ModelAttribute 생략 @ModelAttribute는 생략하여도 알아서 변환..
Spring MVC @PathVariable, @MatrixVariable, @RequestParam 요청을 매핑할 수 있는 @PathVariable, @MatrixVariable, @RequestParam에 대해 알아본다. @PathVariable 요청 URI 패턴의 일부를 핸들러 메서드 파라미터로 받을 수 있다. @GetMapping에서 {id} 부분을 메서드의 파라미터에 매핑시켜준다. 해당 파라미터에 @PathVariable을 붙이면 된다. 만약 /hello/23이라는 요청이 들어오면 id에 23이 매핑될 것이다. 원래라면 @PathVariable에 url {id}와 같이 명시된 name을 위와 같이 적어 주어야 한다. 하나 타입 변환을 지원해주므로 주황색 박스의 변수명이 같으면 빨간색 줄을 생략할 수 있다. 테스트 /hello/1로 요청을 보냈을 때 id에 1이 들어간 것을 알 수 있다. 만약 /..
Spring MVC HEAD, OPTIONS HTTP Method 스프링 웹 MVC에서 기본으로 지원해주는 HEAD, OPTIONS HTTP Method를 기본으로 지원해준다. HEAD, OPTIONS Method에 대한 설명은 이전 게시글에서 작성하였다. HEAD HEAD 메서드는 GET과 동일한 요청을 하지만 응답에 본문이 없고 헤더만 존재한다. 결과를 확인해보면 Body에 아무 정보가 없는 것을 알 수 있다. OPTIONS OPTIONS로 요청은 여러 가지 종류의 지원 범위를 응답해준다. @GetMapping을 통해 GET 메서드만 허용하도록 설정하였다. 만약 여기에 OPTIONS 요청을 보내면 Allow Method에는 GET만 포함될 것이다. 결과를 확인해보면 GET이 들어가 있는 것을 알 수 있다. HEAD, OPTIONS는 Spring에서 기본으로 제공하여..
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 클라이언트가 서버의 리소스를 수정하거나 새로 만들 때 사용한다. 서버에 리소스를 수정하거나 새로 만들 때 보내는..