From 4fa027d13ccd733df1db91765c3c162078ba5508 Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Sat, 14 Feb 2026 20:49:14 +0700 Subject: [PATCH] Leverage the nullability defined at type level Signed-off-by: Tran Ngoc Nhan --- .../ResponseEntityExceptionHandler.java | 32 ++++++------- .../ResponseEntityExceptionHandler.java | 48 +++++++++---------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityExceptionHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityExceptionHandler.java index e65d04f01d7..21f9a233e31 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityExceptionHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ResponseEntityExceptionHandler.java @@ -105,7 +105,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa ErrorResponseException.class, MethodValidationException.class }) - public final Mono> handleException(Exception ex, ServerWebExchange exchange) { + public final Mono> handleException(Exception ex, ServerWebExchange exchange) { if (ex instanceof MethodNotAllowedException theEx) { return handleMethodNotAllowedException(theEx, theEx.getHeaders(), theEx.getStatusCode(), exchange); } @@ -159,7 +159,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleMethodNotAllowedException( + protected Mono> handleMethodNotAllowedException( MethodNotAllowedException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -175,7 +175,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleNotAcceptableStatusException( + protected Mono> handleNotAcceptableStatusException( NotAcceptableStatusException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -191,7 +191,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleUnsupportedMediaTypeStatusException( + protected Mono> handleUnsupportedMediaTypeStatusException( UnsupportedMediaTypeStatusException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -207,7 +207,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleMissingRequestValueException( + protected Mono> handleMissingRequestValueException( MissingRequestValueException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -223,7 +223,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleUnsatisfiedRequestParameterException( + protected Mono> handleUnsatisfiedRequestParameterException( UnsatisfiedRequestParameterException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -239,7 +239,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleWebExchangeBindException( + protected Mono> handleWebExchangeBindException( WebExchangeBindException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -256,7 +256,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code Mono} with the {@code ResponseEntity} for the response * @since 6.1 */ - protected Mono> handleHandlerMethodValidationException( + protected Mono> handleHandlerMethodValidationException( HandlerMethodValidationException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -272,7 +272,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleServerWebInputException( + protected Mono> handleServerWebInputException( ServerWebInputException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -288,7 +288,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleResponseStatusException( + protected Mono> handleResponseStatusException( ResponseStatusException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -304,7 +304,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleServerErrorException( + protected Mono> handleServerErrorException( ServerErrorException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -320,7 +320,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleErrorResponseException( + protected Mono> handleErrorResponseException( ErrorResponseException ex, HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -336,7 +336,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code Mono} with the {@code ResponseEntity} for the response * @since 6.1 */ - protected Mono> handleMethodValidationException( + protected Mono> handleMethodValidationException( MethodValidationException ex, HttpStatus status, ServerWebExchange exchange) { ProblemDetail body = createProblemDetail(ex, status, "Validation failed", null, null, exchange); @@ -394,7 +394,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @param exchange the current request and response * @return a {@code Mono} with the {@code ResponseEntity} for the response */ - protected Mono> handleExceptionInternal( + protected Mono> handleExceptionInternal( Exception ex, @Nullable Object body, @Nullable HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { @@ -421,11 +421,11 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code Mono} with the created {@code ResponseEntity} * @since 6.0 */ - protected Mono> createResponseEntity( + protected Mono> createResponseEntity( @Nullable Object body, @Nullable HttpHeaders headers, HttpStatusCode status, ServerWebExchange exchange) { - return Mono.just(new ResponseEntity<>(body, headers, status)); + return Mono.just(new ResponseEntity<@Nullable Object>(body, headers, status)); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java index 9cb5a30e8bb..f5b3393e112 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java @@ -135,7 +135,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa MethodValidationException.class, AsyncRequestNotUsableException.class }) - public final @Nullable ResponseEntity handleException(Exception ex, WebRequest request) throws Exception { + public final @Nullable ResponseEntity<@Nullable Object> handleException(Exception ex, WebRequest request) throws Exception { if (ex instanceof HttpRequestMethodNotSupportedException subEx) { return handleHttpRequestMethodNotSupported(subEx, subEx.getHeaders(), subEx.getStatusCode(), request); } @@ -219,7 +219,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleHttpRequestMethodNotSupported( + protected @Nullable ResponseEntity<@Nullable Object> handleHttpRequestMethodNotSupported( HttpRequestMethodNotSupportedException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { pageNotFoundLogger.warn(ex.getMessage()); @@ -236,7 +236,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleHttpMediaTypeNotSupported( + protected @Nullable ResponseEntity<@Nullable Object> handleHttpMediaTypeNotSupported( HttpMediaTypeNotSupportedException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -252,7 +252,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleHttpMediaTypeNotAcceptable( + protected @Nullable ResponseEntity<@Nullable Object> handleHttpMediaTypeNotAcceptable( HttpMediaTypeNotAcceptableException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -269,7 +269,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 4.2 */ - protected @Nullable ResponseEntity handleMissingPathVariable( + protected @Nullable ResponseEntity<@Nullable Object> handleMissingPathVariable( MissingPathVariableException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -285,7 +285,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleMissingServletRequestParameter( + protected @Nullable ResponseEntity<@Nullable Object> handleMissingServletRequestParameter( MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -301,7 +301,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleMissingServletRequestPart( + protected @Nullable ResponseEntity<@Nullable Object> handleMissingServletRequestPart( MissingServletRequestPartException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -317,7 +317,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleServletRequestBindingException( + protected @Nullable ResponseEntity<@Nullable Object> handleServletRequestBindingException( ServletRequestBindingException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -333,7 +333,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleMethodArgumentNotValid( + protected @Nullable ResponseEntity<@Nullable Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -350,7 +350,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.1 */ - protected @Nullable ResponseEntity handleHandlerMethodValidationException( + protected @Nullable ResponseEntity<@Nullable Object> handleHandlerMethodValidationException( HandlerMethodValidationException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -367,7 +367,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 4.0 */ - protected @Nullable ResponseEntity handleNoHandlerFoundException( + protected @Nullable ResponseEntity<@Nullable Object> handleNoHandlerFoundException( NoHandlerFoundException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -384,7 +384,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.1 */ - protected @Nullable ResponseEntity handleNoResourceFoundException( + protected @Nullable ResponseEntity<@Nullable Object> handleNoResourceFoundException( NoResourceFoundException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -401,7 +401,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 4.2.8 */ - protected @Nullable ResponseEntity handleAsyncRequestTimeoutException( + protected @Nullable ResponseEntity<@Nullable Object> handleAsyncRequestTimeoutException( AsyncRequestTimeoutException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -418,7 +418,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.0 */ - protected @Nullable ResponseEntity handleErrorResponseException( + protected @Nullable ResponseEntity<@Nullable Object> handleErrorResponseException( ErrorResponseException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -435,7 +435,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.1 */ - protected @Nullable ResponseEntity handleMaxUploadSizeExceededException( + protected @Nullable ResponseEntity<@Nullable Object> handleMaxUploadSizeExceededException( MaxUploadSizeExceededException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { return handleExceptionInternal(ex, null, headers, status, request); @@ -454,7 +454,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleConversionNotSupported( + protected @Nullable ResponseEntity<@Nullable Object> handleConversionNotSupported( ConversionNotSupportedException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { Object[] args = {ex.getPropertyName(), ex.getValue()}; @@ -477,7 +477,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleTypeMismatch( + protected @Nullable ResponseEntity<@Nullable Object> handleTypeMismatch( TypeMismatchException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { Object[] args = {ex.getPropertyName(), ex.getValue(), @@ -502,7 +502,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleHttpMessageNotReadable( + protected @Nullable ResponseEntity<@Nullable Object> handleHttpMessageNotReadable( HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { ProblemDetail body = createProblemDetail(ex, status, "Failed to read request", null, null, request); @@ -522,7 +522,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleHttpMessageNotWritable( + protected @Nullable ResponseEntity<@Nullable Object> handleHttpMessageNotWritable( HttpMessageNotWritableException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { ProblemDetail body = createProblemDetail(ex, status, "Failed to write request", null, null, request); @@ -543,7 +543,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.1 */ - protected @Nullable ResponseEntity handleMethodValidationException( + protected @Nullable ResponseEntity<@Nullable Object> handleMethodValidationException( MethodValidationException ex, HttpHeaders headers, HttpStatus status, WebRequest request) { ProblemDetail body = createProblemDetail(ex, status, "Validation failed", null, null, request); @@ -559,7 +559,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * {@code null} when the response is already committed * @since 6.2 */ - protected @Nullable ResponseEntity handleAsyncRequestNotUsableException( + protected @Nullable ResponseEntity<@Nullable Object> handleAsyncRequestNotUsableException( AsyncRequestNotUsableException ex, WebRequest request) { return null; @@ -614,7 +614,7 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return a {@code ResponseEntity} for the response to use, possibly * {@code null} when the response is already committed */ - protected @Nullable ResponseEntity handleExceptionInternal( + protected @Nullable ResponseEntity<@Nullable Object> handleExceptionInternal( Exception ex, @Nullable Object body, HttpHeaders headers, HttpStatusCode statusCode, WebRequest request) { if (request instanceof ServletWebRequest servletWebRequest) { @@ -650,10 +650,10 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa * @return the {@code ResponseEntity} instance to use * @since 6.0 */ - protected ResponseEntity createResponseEntity( + protected ResponseEntity<@Nullable Object> createResponseEntity( @Nullable Object body, HttpHeaders headers, HttpStatusCode statusCode, WebRequest request) { - return new ResponseEntity<>(body, headers, statusCode); + return new ResponseEntity<@Nullable Object>(body, headers, statusCode); } }