2011-12-20 5 views
0

Android 클라이언트를 작성한 jax-rs rest service가 있습니다.휴식 방법에서 클라이언트 유형을 구분하는 방법은 무엇입니까?

휴식 서비스는 CRUD 보고서에 메서드를 제공합니다. http get 요청은 xml 구조의 보고서 목록을 반환합니다.

이제 브라우저에서 서비스에 액세스하면 http get 요청을 통해 xml 대신 HTML이 반환됩니다.

다른 클라이언트에 대해 다른 결과를 반환하는 메서드를 오버로드하거나 브라우저 클라이언트에 대해 별도의 rest 메서드를 구현해야합니까?

브라우저에 대한 XML 스타일 시트를 포함하여 둘 다 동일한 XML 구조를 사용하는 것으로 생각했지만 자동 생성 된 XML에 xslt 링크를 삽입하는 방법을 알 수 없습니다.

답변

1

Quentin의 대답은 올바른 방향으로 좋은 포인터이지만 jax-rs와 관련이 없습니다. jax-rs specification

3.5

애플리케이션 클래스가 지원 요청 및 응답 @Consumes 23 @Produces 각각 주석을 사용 미디어 유형을 선언 할 부분에 주석 @Produces을 정의한다. 이러한 주석은 자원 방법, 자원 24 클래스 또는 엔티티 제공자에게 적용될 수있다 (4.2.3 절 참조). 자원 메소드에서 이러한 주석 중 을 사용하면 자원 클래스 또는 메소드 인수에 대한 엔티티 제공자 또는 리턴 유형에서 25 any를 대체합니다. 이 주석 중 26 개가 없으면 모든 미디어 유형 (/)에 대해 을 지원한다고 가정합니다.

@Produces로 선언 된 MIME 유형은 요청의 HTTP Accept Request Header과 자동으로 일치합니다. 즉, 클라이언트 요청을 구별하기 위해 다른 @Produces 선언으로 자원 메소드를 정의 할 수 있습니다. 내 경우

나는 XML과 HTML을 반환하는 방법을 반환하는 방법이 필요, 그래서 자원/보고서에서 두 가지 방법 선언을 참조하십시오

@GET 
@Produces({MediaType.TEXT_HTML}) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public String getReportsAsHtml(){...} 

그리고

@GET 
@Produces({MediaType.APPLICATION_XML}) 
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
public List<Report> getReportsAsXml() {...} 

을 수수께끼의 마지막 부분에 대한 헤더 기본 설정 적용에 대한 Quentin의 의견

1
+0

이것은 내가 찾고있는 것 같지만 나를 위해 명확히 할 수 있습니까?요청이 브라우저에서 오는 경우 선호되는 accept mime 유형이 일반적으로 html입니까? – Marmoy

+0

안드로이드 클라이언트가 보내는 수락 헤더는'application/xml'을 강력히 선호해야합니다. 브라우저는 'text/html'에 대한 선호도를 표시하거나 XML과 같은 가중치를'*/* '로 지정합니다. HTML에 대한 선호도가 약한 서비스는 HTML을 브라우저와 XML로 클라이언트에 전달합니다. – Quentin

0

그냥 XML로 모든 시간을 보내고 스타일 시트를 사용합니다. 이 경우에는 스타일 시트가 매우 원시적 일 수있는 것처럼 들리므로 CSS 만 사용하십시오. 다음은 CSS 스타일 시트를 사용하는 XML 문서의 예이며 그 스타일 시트는 이전 버전의 IE와 역 호환됩니다. 스타일 시트에서

http://mailmarkup.org/hcl/hcl1_0-documentation.xsd

공지 사항 복제는 네임 스페이스 선언의 불필요한 언급을 반대합니다. 그래서 IE와의 호환성을 얻을 수있었습니다.

관련 문제