My Spring Boot application provides the following REST controller:
@RestController @RequestMapping("/api/verify") public class VerificationController { final VerificationService verificationService; Logger logger = LoggerFactory.getLogger(VerificationController.class); public VerificationController(VerificationService verificationService) { this.verificationService = verificationService; } @GetMapping public void verify( @RequestParam(value = "s1") String s1, @RequestParam(value = "s2") String s2) { try { verificationService.validateFormat(s1, s2); } catch (InvalidFormatException e) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); } } } In case validateFormat() throws the InvalidFormatException the client gets a HTTP 400 which is correct. The default JSON response body however looks like this:
{ "timestamp": "2020-06-18T21:31:34.911+00:00", "status": 400, "error": "Bad Request", "message": "", "path": "/api/verify" } The message value is always empty even if I hard-code it like this:
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "some string"); This is the exception class:
public class InvalidFormatException extends RuntimeException { public InvalidFormatException(String s1, String s2) { super(String.format("Invalid format: [s1: %s, s2: %s]", s1, s2)); } }