78.6. REST 요청 사용 - 간단한 바인딩 스타일
Camel 2.11에서 사용 가능
기본 바인딩 스타일은 다소 낮은 수준이므로 사용자가 경로에 들어오는 MessageContentsList 오브젝트를 수동으로 처리해야 합니다. 따라서 경로 논리를 method-RS 작업의 서명 및 매개 변수 인덱스로 단조시킵니다. 다소 어색하고, 어렵고 오류가 발생하기도 합니다.
반면 SimpleConsumer 바인딩 스타일은 Camel 메시지 내에서 요청 데이터에 보다 쉽게 액세스할 수 있도록 다음과 같은 매핑을 수행합니다.
- ECDHE-RS 매개변수(@HeaderParam, @QueryParam 등)는 IN 메시지 헤더로 삽입됩니다. 헤더 이름은 주석 값과 일치합니다.
-
요청 엔티티(POJO 또는 기타 유형)는 IN 메시지 본문이 됩니다. 단일 엔티티가ECDHE-RS 메서드 서명에서 식별할 수 없는 경우 원래
MessageContentsList로 대체됩니다. -
Binary
@Multipart본문 부분은 IN 메시지 첨부 파일로,DataHandler,InputStream,DataSource및 CXF의Attachment클래스를 지원합니다. -
바이너리 이외의
@Multipart본문 부분은 IN 메시지 헤더로 매핑됩니다. 헤더 이름은 DestinationRule 부분 이름과 일치합니다.
또한 응답 매핑 에 다음 규칙이 적용됩니다.
-
메시지 본문 유형이
javax.ws.rs.core.(사용자 내장 응답)와 다른 경우 새 응답이 생성되고 메시지 본문이 엔티티로 설정됩니다(따라서 null이 아닙니다). 응답 상태 코드는ResponseExchange.HTTP_RESPONSE_CODE헤더에서 가져온 것으로, 그렇지 않은 경우 기본값은 200 OK입니다. -
메시지 본문 유형이
javax.ws.rs.core.Response와 같은 경우 사용자가 사용자 지정 응답을 빌드했기 때문에 준수되고 최종 응답이 됩니다. -
모든 경우 사용자 지정 또는 기본
HeaderFilterStrategy에서 허용하는 Camel 헤더가 HTTP 응답에 추가됩니다.
78.6.1. 간단한 바인딩 스타일 활성화 링크 복사링크가 클립보드에 복사되었습니다!
이 바인딩 스타일은 소비자 끝점의 bindingStyle 매개변수를 값 SimpleConsumer 로 설정하여 활성화할 수 있습니다.
from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
.to("log:TEST?showAll=true");
78.6.2. 다른 메서드 서명이 있는 요청 바인딩의 예 링크 복사링크가 클립보드에 복사되었습니다!
다음은 Simple 바인딩에서 예상되는 결과와 함께 메서드 서명 목록입니다.
공개 응답 doAction(BusinessObject 요청);
요청 페이로드는 IN 메시지 본문에 배치되어 원래 MessageContentsList를 대체합니다.
공용 응답 doAction(BusinessObject 요청, @HeaderParam("abcd") 문자열 abcd, @QueryParam("defg") 문자열 defg; IN 메시지 본문에 배치된 요청 페이로드를 원래 MessageContentsList를 대체합니다. 두 요청 params 모두 abcd 및 defg라는 이름으로 IN 메시지 헤더로 매핑됩니다.
공용 응답 doAction(@HeaderParam("abcd") 문자열 abcd, @QueryParam("defg") 문자열 defg; both request params mapped as IN message headers with names abcd and defg. 원래 MessageContentsList는 2 매개변수만 포함하더라도 보존됩니다.
공개 응답 doAction(@Multipart(value="body1") BusinessObject 요청), @Multipart(value="body2") BusinessObject 요청2; 첫 번째 매개 변수는 이름 body1이 있는 헤더로 전송되고 두 번째 매개 변수는 헤더 body2로 매핑됩니다. 원래 MessageContentsList는 IN 메시지 본문으로 유지됩니다.
Public Response doAction(InputStream abcd); InputStream은 MessageContentsList에서 래핑되지 않고 IN 메시지 본문으로 보존됩니다.
공용 응답 doAction(DataHandler abcd); DataHandler는 MessageContentsList에서 래핑 해제되어 IN 메시지 본문으로 보존됩니다.
78.6.3. 간단한 바인딩 스타일에 대한 더 많은 예 링크 복사링크가 클립보드에 복사되었습니다!
이 메서드를 사용하는ECDHE-RS 리소스 클래스가 지정되었습니다.
@POST @Path("/customers/{type}")
public Response newCustomer(Customer customer, @PathParam("type") String type, @QueryParam("active") @DefaultValue("true") boolean active) {
return null;
}
다음 경로로 서비스를 제공합니다.
from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
.recipientList(simple("direct:${header.operationName}"));
from("direct:newCustomer")
.log("Request: type=${header.type}, active=${header.active}, customerData=${body}");
XML 페이로드가 있는 다음 HTTP 요청(고객 DTO가 부여됨을 지정함):
POST /customers/gold?active=true
Payload:
<Customer>
<fullName>Raul Kripalani</fullName>
<country>Spain</country>
<project>Apache Camel</project>
</Customer>
메시지를 출력합니다.
Request: type=gold, active=true, customerData=<Customer.toString() representation>
요청 및 쓰기 응답을 처리하는 방법에 대한 더 많은 예제는 여기에서 확인할 수 있습니다.