Package org.springframework.web.context.request.async

# Class TimeoutCallableProcessingInterceptor

java.lang.Object
org.springframework.web.context.request.async.TimeoutCallableProcessingInterceptor

All Implemented Interfaces:
  `CallableProcessingInterceptor`

public class TimeoutCallableProcessingInterceptor extends Object implements CallableProcessingInterceptor
Sends a 503 (SERVICE_UNAVAILABLE) in case of a timeout if the response is not already committed. As of 4.2.8 this is done indirectly by setting the result to an `AsyncRequestTimeoutException` which is then handled by Spring MVC's default exception handling as a 503 error.

Registered at the end, after all other interceptors and therefore invoked only if no other interceptor handles the timeout.

Note that according to RFC 7231, a 503 without a 'Retry-After' header is interpreted as a 500 error and the client should not retry. Applications can install their own interceptor to handle a timeout and add a 'Retry-After' header if necessary.

Since:
  3.2
Author:
  Rossen Stoyanchev

## Field Summary

### Fields inherited from interface org.springframework.web.context.request.async.CallableProcessingInterceptor

`RESPONSE_HANDLED, RESULT_NONE`

## Constructor Summary

Constructors
Constructor
Description
`TimeoutCallableProcessingInterceptor()`

## Method Summary

Modifier and Type
Method
Description
`<T> Object`
`handleTimeout(NativeWebRequest request, Callable<T> task)`
Invoked from a container thread when the async request times out before the `Callable` task completes.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.web.context.request.async.CallableProcessingInterceptor

`afterCompletion, beforeConcurrentHandling, handleError, postProcess, preProcess`

## Constructor Details

### TimeoutCallableProcessingInterceptor

public TimeoutCallableProcessingInterceptor()

## Method Details

### handleTimeout

public <T> Object handleTimeout(NativeWebRequest request, Callable<T> task) throws Exception
Description copied from interface: `CallableProcessingInterceptor`
Invoked from a container thread when the async request times out before the `Callable` task completes. Implementations may return a value, including an `Exception`, to use instead of the value the `Callable` did not return in time.

The default implementation always returns `CallableProcessingInterceptor.RESULT_NONE`.

Specified by:
  `handleTimeout` in interface `CallableProcessingInterceptor`
Parameters:
  `request` - the current request
  `task` - the task for the current async request
Returns:
  a concurrent result value; if the value is anything other than `CallableProcessingInterceptor.RESULT_NONE` or `CallableProcessingInterceptor.RESPONSE_HANDLED`, concurrent processing is resumed and subsequent interceptors are not invoked
Throws:
  `Exception` - in case of errors