Skip to content
readeyKim edited this page Aug 14, 2019 · 1 revision

HCL에서 URL을 구성하는 방법은 @RequestMapping@DynamicURL 2가지가 있습니다.
더불어 HCL은 URL Parameter도 함께 제공합니다.

RequestMapping

  • 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();

DynamicURL

  • 파라미터를 통해 동적으로 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을 중복해서 사용할 수 없습니다.

URL Parameter

@PathParam

  • 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, @Queries, @QueryMap

  • 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);
Clone this wiki locally