たとえば、REST スタイルのコントローラー マッピングがあるとします。
@RequestMapping(value="users", produces = {MediaType.APPLICATION_JSON_VALUE})
public List<User> listUsers(@ReqestParams Integer offset, @ReqestParams Integer limit, @ReqestParams String query) {
return service.loadUsers(query, offset, limit);
}
JSON (または XML) の提供は問題ではありません。ContentNegotation と MessageConverters を使用すると簡単です。
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="true" />
<property name="favorParameter" value="false" />
<property name="ignoreAcceptHeader" value="false" />
<property name="mediaTypes" >
<value>
html=text/html
json=application/json
xml=application/xml
</value>
</property>
</bean>
ここで、PDF のサポートを追加する必要があります。当然、(Spring) MVC + REST をできるだけ使いたい。私が見つけたほとんどの例は、REST スタイルを使用しない明示的な定義でこれを実装しています。
@RequestMapping(value="users", produces = {"application/pdf"})
public ModelAndView listUsersAsPdf(@ReqestParams Integer offset, @ReqestParams Integer limit, @ReqestParams String query) {
List<User> users = listUsers(offset, limit, query); // delegated
return new ModelAndView("pdfView", users);
}
これは機能しますが、代替出力 (PDF、Excel など) ごとにリクエスト マッピングを追加するため、あまり快適ではありません。
application/pdf
コンテンツ ネゴシエーション リゾルバーには既に追加しています。残念ながら、接尾辞.pdf
または Accept-Headerapplication/pdf
を含むリクエストには406
.
PDF などの代替出力を統合するための REST/MVC スタイル パターンの理想的な設定は何ですか?