pub struct ErrorHandlers<B> { /* private fields */ }
Expand description

Middleware for registering custom status code based error handlers.

Register handlers with the ErrorHandlers::handler() method to register a custom error handler for a given status code. Handlers can modify existing responses or create completely new ones.

To register a default handler, use the ErrorHandlers::default_handler() method. This handler will be used only if a response has an error status code (400-599) that isn’t covered by a more specific handler (set with the handler() method). See examples below.

To register a default for only client errors (400-499) or only server errors (500-599), use the ErrorHandlers::default_handler_client() and ErrorHandlers::default_handler_server() methods, respectively.

Any response with a status code that isn’t covered by a specific handler or a default handler will pass by unchanged by this middleware.

Examples

use actix_web::http::{header, StatusCode};
use actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers};
use actix_web::{dev, web, App, HttpResponse, Result};

fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
    res.response_mut().headers_mut().insert(
        header::CONTENT_TYPE,
        header::HeaderValue::from_static("Error"),
    );
    Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
}

let app = App::new()
    .wrap(ErrorHandlers::new().handler(StatusCode::INTERNAL_SERVER_ERROR, add_error_header))
    .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));

Registering default handler

fn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
    res.response_mut().headers_mut().insert(
        header::CONTENT_TYPE,
        header::HeaderValue::from_static("Error"),
    );
    Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
}

fn handle_bad_request<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {
    res.response_mut().headers_mut().insert(
        header::CONTENT_TYPE,
        header::HeaderValue::from_static("Bad Request Error"),
    );
    Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))
}

// Bad Request errors will hit `handle_bad_request()`, while all other errors will hit
// `add_error_header()`. The order in which the methods are called is not meaningful.
let app = App::new()
    .wrap(
        ErrorHandlers::new()
            .default_handler(add_error_header)
            .handler(StatusCode::BAD_REQUEST, handle_bad_request)
    )
    .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));

Alternatively, you can set default handlers for only client or only server errors:

// Bad request errors will hit `handle_bad_request()`, other client errors will hit
// `add_error_header()`, and server errors will pass through unchanged
let app = App::new()
    .wrap(
        ErrorHandlers::new()
            .default_handler_client(add_error_header) // or .default_handler_server
            .handler(StatusCode::BAD_REQUEST, handle_bad_request)
    )
    .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)));

Implementations§

Construct new ErrorHandlers instance.

Register error handler for specified status code.

Register a default error handler.

Any request with a status code that hasn’t been given a specific other handler (by calling .handler()) will fall back on this.

Note that this will overwrite any default handlers previously set by calling .default_handler_client() or .default_handler_server(), but not any set by calling .handler().

Register a handler on which to fall back for client error status codes (400-499).

Register a handler on which to fall back for server error status codes (500-599).

Trait Implementations§

Returns the “default value” for a type. Read more
Responses produced by the service.
Errors produced by the service.
The TransformService value created by this factory
Errors produced while building a transform service.
The future response value.
Creates and returns a new Transform component, asynchronously

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more