Spring/Spring MVC
-
RedirectAttributesSpring/Spring MVC 2020. 6. 22. 01:54
일반적으로 redirect 할 때 어떤 데이터를 모델에 넣는다면 모델에 들어있는 데이터 중 primitive 타입은 자동으로 URI path에 쿼리 파라미터로 추가가 되게 된다. 예를 들어 hello에 Id가 1이고 Name이 Baek이라면 return 값은 "redirect:/hello/list? id=1&name=Baek" 이 되게 되지만 이러한 설정은 스프링 부트에서는 기본적으로 꺼져있다. 다음과 같이 설정을 해주게 되면 이제 모델에 들어있던 primitive 타입들이 자동으로 쿼리 파라미터로 붙게 된다. 이렇게 되면 redirect 되는 주소 쪽에서 @RequestParam, @ModelAttribute 를 통해 해당 값들을 받을 수가 있다. 이때 모델에 들어있는 모든 데이터가 아닌 일부만 명시적..
-
@SessionAttributesSpring/Spring MVC 2020. 6. 16. 10:30
어떤 정보를 세션에 넣고 싶다면 HttpSession을 받아서 사용할 수 있다. @SessionAttributes를 쓴다면 세션에다 넣지 않아도 HttpSession을 쓰지 않아도 자동으로 넣어준다. 이때 이 어노테이션에 설정한 이름에 해당하는 모델 정보를 세션에 넣어주게 된다. @ModelAttribute는 세션에 있는 데이터도 바인딩할 수 있다. 그렇다면 왜 모델 에트리뷰트를 세션에다 넣게 될까? 1. 여러 페이지에 걸친 장바구니 데이터 2. 데이터 생성 시 여러 화면에 걸쳐서 만들어야 하는 경우 SessionStatus를 통해 메서드 아규먼트로 받아서 사용하게 된다. 특정 form 처리가 끝나면 세션이 만료되도록 할 수 있다. @ModelAttribute, @SessionAttribute, Sess..
-
@ModelAttribute과 BindingResultSpring/Spring MVC 2020. 6. 11. 01:54
@RequestParam은 제각각의 심플 타입 값들을 하나씩 받아왔었다면 @ModelAttribute 사용 시 데이터가 여러 개 있는 복합 객체의 형태로 받아올 수 있다. @RequestParam과 마찬가지로 어노테이션을 생략 가능하다. 따라서 해당 Hello객체의 Integer id와 String name으로 하나하나 받아오는 게 아닌 id와 name 데이터가 담긴 Hello 객체를 바인딩받아오는 것 따라서 다음의 테스트는 성공하게 된다. 만약 name값에 Integer 값을 준다면 바인딩 에러가 나게 된다. 이때 BindingResult 타입의 변수를 선언 시 해당 에러를 바로 던지는 게 아니라 이 변수에 바인딩과 관련된 에러를 담게 된다. BindingResults는 상위 타입인 Errors로 바꾸..
-
요청 매개변수를 메소드 아규먼트로 받아오는 방법Spring/Spring MVC 2020. 6. 9. 00:39
요청 매개변수 1. 요청으로 보낼 때 ?key=value 형태의 쿼리 파라미터로 보내기 2. Http 본문에 form 데이터로 보내기 둘 다 요청 매개변수로 서블릿은 처리하게 된다. 그리고 @RequestParam을 통해 받아올 수 있다. 1. 요청으로 보낼 때 ?key=value 형태의 쿼리 파라미터로 보내기 따라서 다음과 같은 Test는 통과 하게 된다. 쿼리 파라미터(name = seungyeol) 가 RequesetParam에 의해 해당 메소드 아규먼트인 String name에 담기게 된다. @RequestParam은 Map으로 받아올 수 있고 해당 파라미터 이름으로 꺼내어 쓸 수도 있다. 2. Http 본문에 form 데이터로 보내기 1. Get 요청으로 /hello/form URI 요청을 처리..
-
핸들러 메소드 URI 패턴Spring/Spring MVC 2020. 6. 9. 00:05
다음과 같은 Test를 성공시켜보자 URI 요청에 /hello/1이 들어오면 해당 URI에 있는 1을 가져오는 것 @PathVariable 이는 @PathVariable을 통해 간단히 가능하다. @PathVariable은 URI의 템플릿 변수를 읽을 때 사용한다. @ResponseBody는 리턴하는 값을 응답 본문에 쓰게 되고 이때 HttpMessageConverter에 의해서 최종적으로 JSON 타입으로 변환되어 보내지게 될 것이다. @PathVariable에 의해 URI에 템플릿 변수 id는 id 아규먼트에 담기게 된다. 그리고 해당 {id}는 String 타입이지만 Integer 타입으로 자동으로 타입 변환이 된다. 다른 이름을 쓰고 싶다면 맵핑하는 값을 써주어야 한다. @MatrixVariable..
-
스프링MVC 핸들러 아규먼트와 리턴타입 살펴보기Spring/Spring MVC 2020. 6. 8. 00:15
1. HttpServletRequest, HttpServletResponse 서블릿 기반 doGet, doPost 메서드에 쓰였던 아규먼트이며 스프링 웹 MVC에도 사용이 가능하다. InputStream, Reader , OutputStream, Writer 등으로 받고 처리할 수 있다. 2. PushBuilder Http2에서 사용하는 방법 요청이 들어올때 보여주고 싶은 이미지가 있다면 그 이미지에 대한 URL을 서버가 또 보내지만 이런 추가적인 데이터를 pushBuilder를 통해 서버가 능동적으로 push 해줄 수 있다. 3. HttpMethod GET이랑 POST를 지원하는 핸들러 중 각 Http 메서드마다 달리하고 싶다면 아규먼트로 주어서 다르게 처리할 수도 있다. 4. Locale, TimeZ..
-
HEAD와 OPTIONS 메소드Spring/Spring MVC 2020. 6. 7. 20:45
스프링 웹 MVC에서 만들어주는 기능 중 Http 메서드에는 head와 option이 있다. 1. head head같은 경우 URI와 동일한 get 요청을 보낸다. 하지만 응답은 본문을 빼고 보내게 되고 응답 헤더만 보내주게 된다. 따라서 다음과 같은 요청에 응답을 테스트해보면 비어있는 응답 본문을 확인할 수 있다. 그 리소스에 대한 간략한 헤더 정보를 확인하는 것 Get 요청에 Body를 실어 보내기 전 사전 정보를 확인하는 것이다. 2. Options 메서드 서버나 특정 URI에 해당하는 리소스가 제공하는 기능을 확인할 때 사용한다. 서버가 살아있는지, 해당 리소스를 처리할 수 있는지 확인한다. 다음의 get, post 핸들러가 있다고 하자 "/hello"라는 URI에 options 요청을 보낼 때의..