-
Notifications
You must be signed in to change notification settings - Fork 1
URLs
readeyKim edited this page Aug 14, 2019
·
1 revision
HCL에서 URL을 구성하는 방법은 @RequestMapping과 @DynamicURL 2가지가 있습니다.
더불어 HCL은 URL Parameter도 함께 제공합니다.
- HttpClient 객체가 가지고 있는 baseUrl과 @RequestMapping의 value로 입력받은 상대경로를 합하여 URL을 구성하는 방식입니다.
- baseUrl은 반드시 설정되어야 합니다.
- value와 method 값을 지정할 수 있습니다.
- value : baseUrl에 이어질 상대경로
- method : Http Method(RequestMethod라는 Enum 활용)
- @PathParam, @Query 등을 통해 URL에 파라미터를 함께 구성할 수 있습니다.
- 상대경로 내에서 @PathParam의 value와 일치하는 '{param}'을 찾아내어 적용됩니다.
@RequestMapping(value="/posts", method=RequestMethod.GET)
CallTask<List<Post>> getPosts();
- 파라미터를 통해 동적으로 URL을 입력 받는 방식입니다.
- @URL을 포함하는 파라미터가 반드시 있어야합니다.
- 지원하는 @URL의 타입은 String, URL, URI입니다.
- HttpClient 객체가 가지고 있는 baseUrl과는 무관합니다.
- @PathParam은 사용 불가능합니다.
- Query가 포함된 URL을 입력할 수도 있고, @Query, @Queries, @QueryMap 등을 통하여 추가 구성할 수 있습니다.
@DynamicURL(method=RequestMethod.GET)
CallTask<List<Post>> getPostsByDynamicURL(@URL String url);
- 하나의 메소드에서 @RequestMapping과 @DynamicURL을 중복해서 사용할 수 없습니다.
-
String value - parameter name을 지정해야 합니다.
- URL 내에서 일치하는 {name}을 찾아 Request 구축 단계에서 값을 대입합니다.
- URL 내 Parameter와 대입하려는 Parameter의 개수는 항상 일치해야 합니다.
- value에서 지정한 name과 일치하는 값이 없거나 URL 내의 파라미터보다 대입하려는 파라미터가 더 많을 경우 Exception이 발생합니다.
@RequestMapping(value="/posts/{id}", method=RequestMethod.GET)
CallTask<Post> getPostsById(@PathParam("id") int id);
- Query Parameter는 주소값 뒤에 ? 이후로 name=value 형태로 전달됩니다.
- String value - Query Parameter의 name을 지정해야 합니다.
- boolean encoded - 추가하는 Query 값의 Encoding 여부를 알려줘야 합니다.(기본값은 false)
- String encodeType - encoding type을 설정할 수 있습니다.(기본값은 "UTF-8")
- 하나의 name에 대해서 한 개의 value를 대입한다면 @Query, 한 개 이상의 value를 대입한다면 @Queries를 사용합니다.
- @Queries의 경우 Array나 List 등 Enhanced-for문이 가능한 타입이어야 합니다.
@RequestMapping(value="/comments", method=RequestMethod.GET)
CallTask<List<Comment>> getCommentsByPostId(@Query(value="postId", encoded=true) Integer postId);
@RequestMapping(value="/comments", method=RequestMethod.GET)
CallTask<List<Comment>> getCommentsByPostId(@Queries(value="postId") List<Integer> postIds);
- @QueryMap을 이용하면 한꺼번에 다수의 Query를 추가할 수 있습니다.
- @QueryMap의 경우 내부 변수로 value를 제외한 encoded, encodeType만을 갖습니다.
@RequestMapping(value="/posts", method=RequestMethod.GET)
CallTask<List<Post>> getPostsByUserInfo(@QueryMap Map<String, String> userInfo);