둘러보기 생략.
 

Restfull방식 PathParam의 값이 없을때?

Restful방식으로 웹서비스를 노출하는 플로젝트에 참여 중입니다.

현재 URI 설정에서

@Path("/xxxxxx/{abc}/{def}/
(@PathParam("abc") String abc, @PathParam("def") String def)

이런 형태로 사용하고 있습니다.

그런데

궁금한 부분은
Path에서 abc 혹은 def부분의 값이 없을때는 URI에 / / /로 한칸을 띄워서 보내면 응답을 받습니다.

이부분이 조금 귀찮은 부분입니다.

값이 있고 없음을 찾아서 따로 값을 셋팅해주는 부분이 놓치기 쉬운 부분이라 실수가 잦네요

혹, /// 이렇게 스페이스바 한칸을 띄우지 않고도 에러없이 URI를 넘길수 있는 환경 세팅이나 소스 코드는 어찌 되나요?

DB에 이름과 나이로 검색을 할때
http://localhost/aaaService/xxxxxx/name/age/

이름만 알고 나이를 알지 못하거나 이름만 동일한 사람을 찾을때
http://localhost/aaaService/xxxxxx/name/ /

나이를 입력하는 부분의 parameter에 한칸을 띄우지 않고 넣으면 에러가 나네요
http://localhost/aaaService/xxxxxx/name//

error : java.lang.ClassCastException: org.apache.cxf.interceptor.Fault

Re] Restfull방식 PathParam의 값이 없을때?

1. 일반적으로 REST URI Template은 Hierarchical 형태로 구성하시는 것이 좋습니다. (ex. /parent/child.., /users/{userId}, ... )
(참고 : http://www.xml.lt/Blog/2008/03/03/RESTful+URIs)
따라서, 검색 조건을 인자로 하여 RESTful Webservices를 호출하는 경우 개별 인자보다는 검색 조건을 담은 VO 객체 형태로 전달하는 것이 좋을 것 같습니다.

2. 만일 검색 조건을 개별적으로 전달하고 싶으신 경우에는 @PathParam 보다는 @QueryParam을 사용하실 것을 권장합니다.
즉, 문의하신 형태의 URI 형태가 아니라 http://localhost/aaaService/xxxxxx?name=...&age=... 와 같은 형태로 RESTful webservices를 호출하시고,
RESTful webservices의 인터페이스의 해당 메소드에 대해 다음과 같이 정의하시면 됩니다.

@GET
@Path(value="/aaaService/xxxxxx/")
public Object getXXXXList(@QueryParam("name") String name, @QueryParam("age") String age) throws Exception;

3. 위의 코드에서 입력 인자로 정의한 name, age param이 존재하지 않을 경우 즉, http://localhost/aaaService/xxxxxx와 같은 형태로 RESTful webservices가 호출되었다면 RESTful webservices의 해당 메소드 호출시 @DefaultValue Annotation을 활용하여 기본값을 부여할 수 있습니다.

@GET
@Path(value="/aaaService/xxxxxx/")
public Object getXXXXList(@DefaultValue("test") @QueryParam("name") String name, @QueryParam("age") String age) throws Exception;