본문 바로가기

Spring/MVC

(23)
스프링 MVC - 그 외 다양한 어노테이션들 DataBinder - @InitBinder InitBinder 를 사용하면 바인딩 설정, 포메터 설정, Validator 설정을 할 수 있는데, 바인딩 설정을 하면, 원하는 값을 허용하거나 거부하거나 설정을 할 수 있다. Validator 는 객체 위에 @NotBlank 이런 어노테이션으로는 할 수 없는 커스텀한 검증을 하고 싶을때 커스텀 Validator 를 생성 할 수 있다. 이런식으로 커스텀한 Validator 를 만들 수 있다. supports 에 커스텀할 객체를 설정하고, validate 에 실제 검증할 로직을 적어준다. addValidators 에 넣어주면된다. 아니면 , Validator 자체를 빈으로 등록하고 , (@Component) 이런식으로도 검증할 수 있다. 이런식으로 쓸 경우에는..
핸들러 메소드 - 응답 데이터 @RequestBody 요청 본문에 있는 데이터를 메시지 컨버터를 이용해서 변환된 타입으로 받을 수 있다. 요청 Body 로 들어온 데이터를 Event 객체로 컨버트 를 하려고 한다 이때 사용되는게 HttpMethod Converter 기본적으로 여러개 가 등록 되어 있다. 핸들러 어댑터가 메시지 컨버터를 이용해서 아규먼트를 요청을 컨버팅 한다 HttpEntity HttpEntity 를 쓰면, RequestBody 와 다른 점은 요청 헤더 정보도 얻을 수 있다는 것 데이터 검증과 BindingResult로 에러도 받아 올 수 있다. @ResponseBody 핸들러에서 return 하는 값을 http 응답 본문에 담아 준다. requestBody 처럼 응답할때 메시지 컨버터를 이용해서 응답한다. Respo..
핸들러 메소드 - 세션 데이터 @SessionAttributes row 하게는 HttpSession 을 이용해서 사용할 수도 있다. 만약 SessionAttributes 를 쓰면 이름에 해당하는 model attribute 를 세션에 넣어준다. (SessionAttribute 와는 굉장히 다르다) 세션을 왜 넣어서 사용하냐 하면 여러 페이지에 걸쳐서 요청을 받았을때, 세션에 있는 값도 @ModelAttribute 를 통해서 객체에 값이 들어가게 된다. @SessionAttribute 세션으로 저장되어 있는 데이터를 가져 올 수 있다. HttpSession 과 다른 점은? HttpSession 으로 받은 데이터는 데이터 타입이 Object 로 나오게 된다. 타입 변경 하기가 훨씬 쉽다. @RedirectAttributes Redirec..
핸들러 메소드 - 요청 데이터 아규먼트와 리턴 타입 핸들러에서 받을 수 있는 메소드 아규먼트를 먼저 봐보자 표 처럼 아규먼트 타입을 받을 수 있다. 이번엔 응답 리턴 값을 알아보자 ResponseEntity 는 응답 본문 부터 헤더 까지 셋팅 할 수 있다. URI 패턴 이번엔 Uri에 들어있는 패턴을 메소드 아규먼트로 가져오는 방법을 알아보자 PathVariable 을 통해 가져온다 문자열을 넘겨줘도 Integer 로 자동 변환 된다. Matrix Variable 을 쓰기도 한다. 로 쓰면 로 받아 올 수 있다. 하지만 이 설정은 비활성화 되어 있기때문에, 쓰고 싶으면 로 설정을 해서 활성화 시켜야 한다. 요청 파라미터 파라미터는 @RequestParam 으로 받아오는데 이걸 생략이 가능하다. 객체를 받아올 때는 @ModelAttri..
Spring MVC 핵심 기술 - 커스텀 어노테이션 메타 에노테이션 - 에노테이션에서 쓸 수 있는 에터테이션 이 메타 에노테이션을 합쳐서 만든 에노테이션을 컴포즈드 에노테이션이라고 한다. - 코드를 간결하게 줄이고, 더 명확하게 에노테이션을 만들 수 있다. 예제 이렇게 에노테이션을 만들고 hello 를 요청해봤더니, 404 페이지가 나왔다 왜? GetHelloMapping 에노테이션이 사라지기 때문에 가장 중요한 속성인 @Retention 이 있다. 이 에노테이션을 언제까지 살려둘것인가를 정한다 기본값은 CLASS 다. .class 파일을 만들때까지는 살아있지만 런타임 시에는 사라지게 된다. 그래서 여기서 저걸 정상적으로 사용하려면 RUNTIME 으로 변경해줘야 한다. 타겟은 이 에노테이션이 어디에서 사용할 수 있을지 정해주는것 METHOD 로 하면 메소..
Spring MVC 핵심 기술 - 요청 맵핑 Http 요청을 핸들러에 맵핑하는법을 봐보자 * 컨트롤러에 있는 요청을 처리할 수 있는 메소드를 핸들러라고 부른다 단순한 거니 후다닥 보고 넘어가자 뷰로 보내는게 아니라 응답 메시지를 내보내고 싶을때 @ResponseBody 어노테이션 붙여준다 해당 핸들러 테스트 테스트용 스프링 러너를 이용하고, 테스트를 해준다, 여기서 RequsetMapping 에는 Get,Post,Put 등 Http 메소드를 적어 줄 수있는데, Get 으로 보낼경우에는 캐싱을 할 수 있다. 보내는 요청 헤더에 캐싱 관련 헤더를 붙여 넣을 수 있다. 조건적 GET 이라 하면, not Modified ,Modified since 같은 헤더를 이용 하는 건데, 조건에 따라 캐싱한 값을 바로 보내줘서 요청이 굉장히 빠르게 해결된다. POS..
WebMvcConfigurer - HttpMessageConverter HttpMessageConverter 는 우리가 만든 컨트롤러에서 @RequestBody 로 요청 메세지를 읽어오거나 @ResponseBody 로 응답을 작성할때 사용한다. 문자열을 변환하거나 문자열이 JSON 이면 객체로변환하거나, XML 을 객체로 변환하거나가 가능해진다. 기본으로 등록 되어있는 컨버터 들이고, 괄호로 되어있는건 pom.xml 에 등록이 되면 설정이 되는 얘들이다. extendMessageConverters 로 WebMvcConfigurer 에서 설정 할 수 있지만, 가장 추천하는 방법은 의존성 추가로 설정을 추가 하는 방식이다. 그래서 위와 같은 컨버터를 구현하는 경우는 거의 없다. JSON 용 메시지 컨버터를 만들어보자 부트에서는 이미 jackson 의존성이 추가 되어있어서, 바로..
WebMvcConfigurer - Resource Handler 이미지, 자바스크립트 , html 같은 정적인 핸들러를 처리할 때 사용하는 핸들러 리소스 핸들러는 톰켓 같은 서블릿 컨테이너가 제공하는 디폴트 리소스 핸들러가 있다. 스프링 부트에서는 리소스 핸들러가 최하위 우선 순위를 갖는다. 다른 핸들러 맵핑들이 먼저 요청을 처리하고, 마지막으로 리소스 핸들러가 적용 어떤 요청 패턴을 적용할 건지, 어디서 리소스를 찾을 건지, 캐싱을 해줄지 등 리소스 핸들러를 설정 할 수 있다.