Как упомянули Норман и Вибс, не понимая ваших точных требований, немного сложно дать точный ответ, однако .... Я думаю, что следующее обеспечивает общий способ обработки ошибок сервера, которых вы не ожидали. Он возвращает HTTP 500 «Внутренняя ошибка сервера» клиенту, а затем закрывает канал. Очевидно, я делаю предположение, что ваши клиенты запрашивают и получают по HTTP, которых они могут не быть, и в этом случае решение Veebs лучше.
import org.jboss.netty.channel.ChannelFutureListener;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponseStatus;
import org.jboss.netty.handler.codec.http.HttpVersion;
public class ServerErrorHandler extends SimpleChannelHandler {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
HttpResponse err = new DefaultHttpResponse(HttpVersion.HTTP_1_1,
HttpResponseStatus.INTERNAL_SERVER_ERROR);
e.getChannel().write(err).addListener(ChannelFutureListener.CLOSE);
}
}
Примечание При использовании этого решения, то вам нужно будет добавить HttpResponseDecoder к вашему трубопроводу также.
Очевидно, что если у вас есть определенные исключения, которые вы хотите поймать и обработать, тогда вы должны написать дополнительную логику для этого.
HTH!