diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java index 15df671c0c8..916b8685217 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractMessageWriterResultHandler.java @@ -175,7 +175,7 @@ public abstract class AbstractMessageWriterResultHandler extends HandlerResultHa } // For ProblemDetail, fall back on RFC 7807 format - if (bestMediaType == null && elementType.toClass().equals(ProblemDetail.class)) { + if (bestMediaType == null && ProblemDetail.class.isAssignableFrom(elementType.toClass())) { bestMediaType = selectMediaType(exchange, () -> getMediaTypesFor(elementType), this.problemMediaTypes); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandlerTests.java index 6cd9596a043..6c1de10a36c 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/ResponseBodyResultHandlerTests.java @@ -139,9 +139,9 @@ public class ResponseBodyResultHandlerTests { } private void testProblemDetailMediaType(MockServerWebExchange exchange, MediaType expectedMediaType) { - ProblemDetail problemDetail = ProblemDetail.forStatus(HttpStatus.BAD_REQUEST); + MyProblemDetail problemDetail = new MyProblemDetail(HttpStatus.BAD_REQUEST); - Method method = on(TestRestController.class).returning(ProblemDetail.class).resolveMethod(); + Method method = on(TestRestController.class).returning(MyProblemDetail.class).resolveMethod(); HandlerResult result = getHandlerResult(new TestRestController(), problemDetail, method); this.resultHandler.handleResult(exchange, result).block(Duration.ofSeconds(5)); @@ -196,7 +196,7 @@ public class ResponseBodyResultHandlerTests { return null; } - public ProblemDetail handleToProblemDetail() { + public MyProblemDetail handleToProblemDetail() { return null; } @@ -217,4 +217,13 @@ public class ResponseBodyResultHandlerTests { } } + + private static class MyProblemDetail extends ProblemDetail { + + public MyProblemDetail(HttpStatus status) { + super(status.value()); + } + + } + } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java index 1f7406353a3..1f85b4c1f6f 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java @@ -1,4 +1,4 @@ -/* +`/* * Copyright 2002-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -374,7 +374,7 @@ class RequestResponseBodyMethodProcessorTests { } private void testProblemDetailMediaType(String expectedContentType) throws Exception { - ProblemDetail problemDetail = ProblemDetail.forStatus(HttpStatus.BAD_REQUEST); + MyProblemDetail problemDetail = new MyProblemDetail(HttpStatus.BAD_REQUEST); this.servletRequest.setRequestURI("/path"); @@ -805,7 +805,7 @@ class RequestResponseBodyMethodProcessorTests { } @SuppressWarnings("ConstantConditions") - ProblemDetail handleAndReturnProblemDetail() { + MyProblemDetail handleAndReturnProblemDetail() { return null; } @@ -821,6 +821,15 @@ class RequestResponseBodyMethodProcessorTests { } + private static class MyProblemDetail extends ProblemDetail { + + public MyProblemDetail(HttpStatus status) { + super(status.value()); + } + + } + + private static abstract class MyParameterizedController { @SuppressWarnings("unused")