Spring/Spring MVC
-
핸들러, 헤더, 메개변수Spring/Spring MVC 2020. 6. 6. 01:59
다음과 같이 Authorization 헤더가 들어있는 경우만 요청을 처리하도록 정해줄 수 있다. 따라서 다음과 같은 Test는 Authorization 헤더가 없기에 실패하게 된다. 반대로 해당 헤더가 들어있지 않은 경우만 처리하도록 할 수도 있다. 예로 Authorization 헤더가 들어있지 않은 경우에만 처리하도록 하였다. 추가로 다음과 같이 특정 헤드에 특정 값이 들어있는 경우만 처리할 수도 있다. Authorization 헤더에 "hi" 가 담긴 경우에만 처리가 된다. 요청에 보내는 파라미터들(?name=ganada)도 헤더와 마찬가지로 적용이 가능하다. 이 핸들러로 요청을 처리하려면 "name"이라는 파라미터가 있어야 한다. 테스트를 예로 다음과 같이 파라미터를 추가할 수 있다. 역시 정확히 ..
-
핸들러와 Media TypeSpring/Spring MVC 2020. 6. 4. 01:07
어떤 핸들러가 있고 핸들러에서 Json을 보내는 요청만 처리를 하고 싶다면? Content-type 헤더를 통해 해당 요청을 알려주면 서버는 consumes를 통해 해당 요청만 처리할 수 있도록 설정할 수 있다. 따라서 다음과 같은 Test는 Content-type 헤더를 주지 않았으므로 415 에러가 나게 된다. 테스트가 아닌 브라우저에서 보냈다면 html/text에 값이 들어있을 것이고 Json이 아니기에 마찬가지로 에러가 나게 된다. 다음과 같이 consumes로 설정했던 타입을 주게 되면 성공적인 200 응답이 나오는 것을 볼 수 있다. 또는 Accept 헤더를 사용해서 어떠한 응답을 원하는지 적어줄 수 있다. contentType : 해당 요청을 보내겠다. Accept : 해당 응답을 받겠다. ..
-
핸들러 URI 패턴Spring/Spring MVC 2020. 6. 2. 23:55
한 글자가 추가로 오는 경우 ?는 한문자를 나타내며 랜덤한 글자를 모두 맵핑하게 된다. 따라서 다음과 같은 요청은 /hellos 지만 200응답이 나오게 된다. 여러 개의 글자가 추가로 오는 경우 * 를 붙여서 여러 개의 글자를 추가로 맵핑하게 된다. 따라서 다음과 같은 테스트는 통과하게 된다. 하나의 * 는 하나의 path(/)를 기준으로 하므로 다음과 같은 Test는 실패하게 된다. 여러개의 path(/) 로도 허용하려면 *를 2개 붙여주면 된다. 핸들러 요청을 정규식으로 받아보기 다음과 같이 정규식과 @PathVariable를 통해 URI Path에 들어있는 name을 받아올 수 있다. 이제 name으로는 영문자만 허용하고 응답 본문으로 "hello seungyeol" 이 나오게 된다. 다음과 같은..
-
Http method와 요청 매핑Spring/Spring MVC 2020. 6. 2. 01:38
해당 핸들러는 RequestMapping을 통해 핸들러 역할을 하게 된다. 이때 메소드를 따로 명시하지 않으면 모든 메서드 요청을 다 허용하게 된다. Get만 처리하고 싶다면 method에다 허용하고 싶은 RequestMethod를 설정해주면 된다. 이제 Post요청을 보내보면 405로 Method NotAllowed 가 되는 것을 알 수 있다. Get과 Post를 둘다 허용한다면 다음과 같이 할 수 있다. Http 메소드에 대해 알아보자. Get 클라이언트가 서버에 있는 리소스를 요청할 때 사용한다 Get요청에 응답은 캐싱이 가능하다. 캐시와 관련된 헤더를 응답에 싣고 if-not-modified를 통해 조건 Get 가능하다. 브라우저에 히스토리에 남게 된다. 민감한 데이터를 보낼 때는 URL에 다 표..
-
WebMvcConfigurer 살펴보기Spring/Spring MVC 2020. 5. 31. 21:13
WebMvcConfigurer로 할 수있는 일들을 살펴보았다. addFormatters addInterceptors addResourceHandlers 하지만 이 외에도 WebMvcConfigurer는 다양한 설정들을 제공한다. addReturnValueHandlers ReturnValueHandler는 핸들러에서 리턴되는 Person , String 등을 처리하는 핸들러 addReturnValueHandlers를 통해 리턴 값 핸들러를 설정 할 수 있다. 스프링 MVC가 제공하는 리턴 값 핸들러 이외에 커스텀한 리턴 핸들러를 추가할 수 있다. 이러한 리턴타입이 오면 이런식으로 처리하게끔 알려줄 수 있다. addViewController /hi 를 입력했을떄 hi에 해당하는 뷰로 바로 이동시키려면? 이런..
-
Json 컨버터Spring/Spring MVC 2020. 5. 28. 22:03
기본 HTTP message Converter가 제공이 되지만 의존성을 통해 컨버터를 등록하는 경우가 많다. 기본적으로 스프링 부트는 스타터 웹만 추가해도 JacksonJSON을 의존성에 넣어준다. (스프링 부트 기반이 아니라면 JacksonJSON 의존성을 넣어주면 된다) 따라서 해당 컨버터를 사용할 수 있게 되고 jacksonJSON이 제공하는 ObjectMapper을 활용할 수 있다. 의존성만 추가가 되면 아무런 설정을 하지 않아도 JSON 컨버터를 사용할 수 있다. 다음과 같이 요청 본문으로 들어오는 Json을 person 객체로 받아보자. 그리고 person을 그대로 return 해보자. 이때 응답으로 보내는 리턴 타입인 Person을 Json 타입으로 보내보자. 여러 가지 Http Messag..
-
HTTP 메세지 컨버터와 StringSpring/Spring MVC 2020. 5. 28. 00:02
@RequestBody를 통해 요청 본문에 있는 메시지를 읽어 들이거나 @ResponseBody 나 @RestController를 통해 응답 본문에 메시지를 작성할 때 HTTP 메세지 컨버터를 통해 컨버전하게 된다 여러 가지 기본 Http message converter 바이트 배열 컨버터 문자열 컨버터 Resource 컨버터 From 컨버터 : Html에서 보내는 Form데이터를 Map으로 변환 ( or Map -> Form ) 스프링 부트 역시 기본 HTTP message Converter를 사용한다. 요청 본문에 있는 문자열을 그대로 문자열에 받거나 핸들러에서 리턴하는 문자열을 그대로 응답 메시지에 쓰는 것이 가능하다. 특정 classpath에 class가 있는 경우에만 등록이 되는 게 HTTP 테..
-
리소스 핸들러Spring/Spring MVC 2020. 5. 2. 23:10
리소스 핸들러는 이미지, JS, CSS, HTML 등의 정적인 리소스를 처리하는 핸들러이다. 이 핸들러는 서블릿 컨테이너 ( 톰캣 , 제티 등 )가 기본으로 제공하는 Default 서블릿 이며 이미 등록이 되어있다. 스프링은 이렇게 등록돼있는 디폴트 서블릿에 이 요청을 위임해서 정적인 리소스를 처리한다. 그런데 정적인 리소스 핸들러가 요청을 먼저 다 가로챈다면 우리가 만든 핸들러들은 무시될 것이다. 즉 우리가 만든 핸들러들이 우선순위가 더 높아야 하기 때문에 기본적으로 리소스 핸들러의 우선순위는 낮다. 스프링 부트를 쓰고 있다면 아무런 설정 없이도 기본 정적 리소스 핸들러와 캐싱 기능을 제공한다. 그 디렉터리 중 하나가 static 디렉터리이다. static 디렉터리 안에 index html 파일을 만들..