私は自分自身のerrorHandlerクラスを作成したサンプルコードでこの方法でjettyサーバーを起動しました。いくつかの調査を通して、私はいくつかの情報を得ましたhere.しかし、それは私が欲しいものを得るのに十分ではないようです。サーバーによって呼び出されるように設定されているクラスの名前は、HandleClientです。jetty ErrorHandlerがJavaでjson形式でエラーを表示する方法
エラー404が発生した場合は、{"message":"HTTP error 404"}
と表示されます。とにかくプログラムは正常に動作しますが、応答はテキスト/プレーン形式です。
問題: MIME MediaType:application/jsonでエラーをフォーマットして表示するにはどうすればよいでしょうか。
私はこれで眠れない夜を過ごしました。すべての助けに非常に感謝します。
public class MVCPatternNsano{
public MVCPatternNsano(){
}
public static void main(String args[]) throws JSONException, IOException{
MVCPatternNsano mvcPatternNsano = new MVCPatternNsano();
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
Server jettyServer = new Server(9000);
jettyServer.setHandler(context);
context.setErrorHandler(new ErrorHandler());
// default error handler for resources out of "context" scope
jettyServer.addBean(new ErrorHandler());
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
// Tells the Jersey Servlet which REST service/class to load.
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
HandleClient.class.getCanonicalName());
try {
jettyServer.start();
jettyServer.join();
} catch (Exception ex) {
Logger.getLogger(HandleClient.class.getName()).log(Level.SEVERE, null, ex);
} finally {
jettyServer.destroy();
}
}
/**
* Dummy error handler that disables any error pages or jetty related messages and returns our
* ERROR status JSON with plain HTTP status instead. All original error messages (from our code) are preserved
* as they are not handled by this code.
*/
static class ErrorHandler extends ErrorPageErrorHandler {
@Override
public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter()
.append("{\"message\":\"HTTP error ")
.append(String.valueOf(response.getStatus()))
.append("\"}");
}
}
}