【Jersey MVC Templates】Viewableを返すリソースをテストする
概要
Jersey MVCを知っている人向け
自前のTemplateProcessorを作って、テスト時はそいつから適当な出力をさせましょうというお話です。
Jersey MVCを知らない人向け
Java EEでRESTを実現する仕様であるところのJAX-RSの実装のひとつに、Jerseyというものがあります。
Jerseyには独自の拡張としてJersey MVC Templatesというものがあり、これを使うとMustach/Freemaker/JSPなどをテンプレートとして使用して出力を加工することができます。
わりとよくある感じの手順でWebアプリを作れるわけです。
ソース
Viewableを返すリソースクラスをテストするときは、このダミーのテンプレートプロセッサを使うようにApplicationクラスの中で指定してください。
ダミーのテンプレートプロセッサ
TestTemplateProcessor.java
@Provider
public class TestTemplateProcessor implements TemplateProcessor<String> {
@Override
public String resolve(String string, MediaType mt) {
return string;
}
@Override
public void writeTo(
String t,
Viewable vwbl,
MediaType mt,
MultivaluedMap<String, Object> mm,
OutputStream out)
throws IOException {
final ObjectMapper objectMapper = new ObjectMapper();
try (PrintStream ps = new PrintStream(out, true, "UTF-8")) {
ps.print("path=");
ps.print(t);
ps.println();
ps.print("model=");
ps.print(vwbl.getModel().toString());
ps.println();
ps.print("refletion=");
ps.println(ToStringBuilder.reflectionToString(vwbl.getModel()));
ps.println();
ps.print("json=");
ps.println(objectMapper.writeValueAsString(vwbl.getModel()));
ps.println();
}
}
}
Applicationクラスの例
MyTestApplication.java
@ApplicationPath("res")
public class MyTestApplication extends ResourceConfig {
public MyTestApplication() {
super(MyTestTarget.class,
MvcFeature.class,
TestTemplateProcessor.class
);
}
}