2011-10-12 2 views
0

I가 다음과 같은 2 가지 방법 ... 저지는 예상대로 처리되지 않은 HTTP (405), 경로 매핑을 얻기

@GET 
@Path("/{solution}") 
public Response test(@PathParam("solution") String solution, 
     @Context UriInfo uriInfo, @Context HttpHeaders headers); 

@GET 
@Path("/{solution}/{path:[a-z0-9/\\-]*}") 
public Response testTest(@PathParam("solution") String solution, 
     @PathParam("path") String nodePath, 
     @Context UriInfo uriInfo, @Context HttpHeaders headers); 

내가 전화

/내 - 응용 프로그램/테스트/두 번째 메서드를 호출하고 매개 변수 도착 테스트 올바르게 설정하십시오. 첫 번째 메소드가 호출되는 대신/my-app/test를 호출하면 HTTP 405 메소드를 찾을 수 없습니다. 나는 URL을 다른 메소드 중 하나에 매핑한다고 가정하고있다.

@DELETE 
@Path("{path: [a-z0-9/\\-]*}") 
public Response deleteTest(@PathParam("path") String path, @Context HttpHeaders headers); 

누구나 내가 잘못 한 점을 알아 냈습니까? 누구든지 저지가지도에 표시하려고하는 것을 알아 내기위한 조언을 얻었습니까?

감사합니다. 정의 3 방법에

답변

3

는 본질적으로 3 개 자원이 상술 같이

  • /{용액}
  • /{용액}/{경로 [A-Z0-9/\ -] *}
  • {경로 :/A-Z0-9 \ -] *}

저지 방법 리소스에 대한 요청을 일치는 먼저 그것이 맵핑되어야하는 자원 (즉 URI 패턴)를 결정한다. 세 번째 것은 요청 URL과 일치하는 가장 구체적인 URL이므로 일치해야합니다. Jersey는 해당 리소스에 대해 해당 HTTP 메소드가 처리되는지 여부를 확인합니다. 이것은 JAX-RS 스펙을 준수합니다. 여기에서 스펙의 일치 알고리즘에 대한 자세한 설명을 볼 수 있습니다 : http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-360003.7.2

따라서 논리적 자원에 대해 생각하고 URI 템플릿을 고려한 다음 구현해야합니다 이것들에 대응하는 HTTP 메소드. 나는. "/ {solution}"및 "/ {solution}/{path : [a-z0-9/\ -] *" "논리적으로 두 개의 별개의 자원이고 둘 다 @DELETE를 지원해야하는 경우 두 개의 삭제 작업을 정의해야합니다. 하나는 첫 번째 템플릿과 다른 하나는 두 번째 URI 템플릿을 사용합니다.

+0

주셔서 감사합니다. 주위를 둘러 본 후 발견 한 내용입니다. 나는 네가 제안한 것처럼 끝냈어. – TedTrippin

관련 문제