Skip to content

Commit

Permalink
ResponseStatusException reason as message code for ProblemDetail
Browse files Browse the repository at this point in the history
  • Loading branch information
quaff authored and rstoyanchev committed Apr 6, 2023
1 parent 6697f01 commit a3532bf
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
* {@code @RestController} or {@code RestControllerAdvice} class.
*
* @author Rossen Stoyanchev
* @author Yanming Zhou
* @since 6.0
* @see ErrorResponseException
*/
Expand Down Expand Up @@ -142,6 +143,14 @@ default ProblemDetail updateAndGetBody(@Nullable MessageSource messageSource, Lo
if (detail != null) {
getBody().setDetail(detail);
}
else {
// detail from ResponseStatusException reason may be message code
detail = getBody().getDetail();
if (detail != null) {
detail = messageSource.getMessage(detail, null, detail, locale);
getBody().setDetail(detail);
}
}
String title = messageSource.getMessage(getTitleMessageCode(), null, null, locale);
if (title != null) {
getBody().setTitle(title);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.springframework.web.method.annotation.HandlerMethodValidationException;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.multipart.support.MissingServletRequestPartException;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.NoHandlerFoundException;
Expand All @@ -80,6 +81,7 @@
*
* @author Rossen Stoyanchev
* @author Sebastien Deleuze
* @author Yanming Zhou
*/
public class ResponseEntityExceptionHandlerTests {

Expand Down Expand Up @@ -199,6 +201,30 @@ public void errorResponseProblemDetailViaMessageSource() {
}
}

@Test
public void reasonAsDetailShouldBeUpdatedViaMessageSource() {

Locale locale = Locale.UK;
LocaleContextHolder.setLocale(locale);

String code = "bad.request";
String message = "Breaking Bad Request";
try {
StaticMessageSource messageSource = new StaticMessageSource();
messageSource.addMessage(code, locale, message);

this.exceptionHandler.setMessageSource(messageSource);

ResponseEntity<?> entity = testException(new ResponseStatusException(HttpStatus.BAD_REQUEST, code));

ProblemDetail body = (ProblemDetail) entity.getBody();
assertThat(body.getDetail()).isEqualTo(message);
}
finally {
LocaleContextHolder.resetLocaleContext();
}
}

@Test
public void conversionNotSupported() {
testException(new ConversionNotSupportedException(new Object(), Object.class, null));
Expand Down

0 comments on commit a3532bf

Please sign in to comment.