Catalyst에서 RESTful 서버를 함께 해킹하고 있습니다. 이것은 명목상 엄격한 RESTful 서비스이지만 호출자가 받아 들인 응답 유형에 대해서는별로 신경 쓰지 않고 항상 Template Toolkit에서 XML로 렌더링해야합니다. 이 뷰 클래스는 config 블록에 선이콘텐츠 유형이 지정되지 않은 경우 Catalyst 요청자 다음에보기를 렌더링하도록 Catalyst :: Controller :: REST를 강제 설정하려면 어떻게해야합니까?
sub process {
my ($self, $c) = @_;
$c->response->content_type('text/xml; charset=utf-8');
$self->SUPER::process($c);
}
, "TEMPLATE_EXTENSION => '.tt2'"
: 그래서 난 그냥 슈퍼 클래스를 콘텐츠 형식을 설정하고 호출하는 '과정'방법 (Catalyst::View::TT
기준) 내 자신의 뷰 클래스를 나는 Catalyst가 어떻게 $c->stash->{template} = 'world/view.tt2'
과 같은 것을 말할 때 .tt2
확장은이 클래스를 사용해야 함을 의미한다는 것을 알고있다. 그렇지 않으면 Catalyst가 어떤 뷰 클래스를 사용하는지 어떻게 알지 못한다.
마지막 REST 컨트롤러 동작 (호출자가 수락 한 응답 유형과 일치하는 모든 serializer에 위임함) 대신 기본 REST 컨트롤러 동작을 재정의하는 대신 'RenderView'ActionClass가 있으며 대신 기본 뷰로 넘어갑니다.
.------------------------------------------------------------+-----------.
| Action | Time |
+------------------------------------------------------------+-----------+
| /world/begin | 0.000123s |
| /auto | 0.000139s |
| /world/world_id | 0.268140s |
| /world/view | 0.259048s |
| /world/view_end | 0.000083s |
| /view_end_GET | 0.110241s |
| /world/end | 0.049207s |
| -> Zoo::View::XML->process | 0.048564s |
'------------------------------------------------------------+-----------'
하지만, 내 POST 요청이 돈 '내가 GET 이것을 테스트 할 때, 나는 처리 방법은 액션 체인의 끝에 나타나는 참조하고 뷰가 제대로 렌더링
sub end : ActionClass('RenderView') { }
처럼 이것은 단지 보이는 t는보기를 렌더링하는 것 같습니다. 기본적으로 $c->stash->{template}
을 설정했지만 415 UNSUPPORTED 오류 코드와 함께 원하는 본문 대신 Content-type unsupported...
오류 메시지가 표시됩니다. POST 요청의 액션 체인의 끝에 Zoo::View::XML->process
에 대한 호출의 부족을 참고 :
.------------------------------------------------------------+-----------.
| Action | Time |
+------------------------------------------------------------+-----------+
| /world/begin | 0.030158s |
| /auto | 0.000116s |
| /world/world_id | 0.001228s |
| /world/lock | 0.000915s |
| /world/lock_end | 0.000049s |
| /lock_end_POST | 0.809860s |
| /world/end | 0.000279s |
'------------------------------------------------------------+-----------'
더 깊이 파고, 그것은 $c->response->body
이 이미 설정되어있는 경우 자동으로하는 (메시지 경고를 삽입하여), 구제 할 RenderView 행동처럼 보인다 나는 POST 요청 (내 lock_end
서브 루틴에 도달 할 때 본문이 "Content-type unsupported"오류 메시지로 설정되었지만 GET 요청 ($c->response->body
은 정의되지 않은 상태 임)이 아닌 것으로 판단했습니다.
POST가 응답 유형에 대해 까다로운 이유는 누구나 알 수 있습니다. GET은 그렇지 않습니다. 요청한 컨텐트 유형 (또는 부족함)에 대해 걱정하지 않으려면 POST에 어떻게 알릴 수 있습니까? the Catalyst::Controller::REST documentation을 보면 아마도 아무 것도하지 않는 기본 디시리얼라이저를 지정해야 할 필요가있을 것 같습니다. 하지만 정확히 어떻게? 당신의 도움에 대한 감사 하라구요
.... 내 컨트롤러 클래스에 __PACKAGE__->config(default => 'text/xml');
추가
'http : // search.cpan.org/~ bobtfish/Catalyst-Action-RenderView-0.16/lib/Catalyst/Action/RenderView.pm'에있는 문서는'__PACKAGE __-> config (default_view = > 'text/xml');'. –
@ ViniciusJoséLatorre는 C : A : RenderView를위한 것입니다.이 질문은 C : A : REST에 있습니다. –