レスポンスに404とか返したいとき(解決)
追記: 以下のコードは5.0.7以降では動きません。http://d.hatena.ne.jp/butyricacid/20080105/1199519835 に5.0.7用の変更点を書きました。
http://d.hatena.ne.jp/butyricacid/20070517/1179387811 の問題ですが、コメントに頂いたActionResponseGeneratorを使って解決しました。コメントのようにActionResponseGeneratorを直接返しても良いのですが、以下のようにすることもできるようです。
public class ErrorResponse { private int _statusCode; private String _message; public ErrorResponse(int statusCode, String message) { super(); _statusCode = statusCode; _message = message; } public int getStatusCode() { return _statusCode; } public String getMessage() { return _message; } }
public class ErrorResponseResultProcessor implements ComponentEventResultProcessor<ErrorResponse> { public ActionResponseGenerator processComponentEvent( final ErrorResponse errorResponse, Component component, String methodDescripion) { return new ActionResponseGenerator() { public void sendClientResponse(Response response) throws IOException { response.sendError(errorResponse.getStatusCode(), errorResponse.getMessage()); } }; } }
AppModule.java に次のメソッドを追加。
public void contributeComponentEventResultProcessor( MappedConfiguration<Class, ComponentEventResultProcessor> configuration) { configuration.add(ErrorResponse.class, new ErrorResponseResultProcessor()); }
これで、イベントハンドラの戻り値にErrorResponseのオブジェクトを返せるようになります。
Object onActivate(long thumbnailId) { if (/* 画像がある場合 */) { // 前回の StreamResponse を返すコード。 } else { return new ErrorResponse(HttpServletResponse.SC_NOT_FOUND, "画像が見つかりません"); } }