Сообщение об исключении не включается в ответ при выдаче исключения ResponseStatusException в Spring Boot - PullRequest
14 голосов
/ 19 июня 2020

Приложение My Spring Boot предоставляет следующий контроллер REST:

@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());
        }
    }
}

В случае, если validateFormat() выбрасывает InvalidFormatException, клиент получает правильный HTTP 400. Однако тело ответа JSON по умолчанию выглядит так:

{
    "timestamp": "2020-06-18T21:31:34.911+00:00",
    "status": 400,
    "error": "Bad Request",
    "message": "",
    "path": "/api/verify"
}

Значение message всегда пусто, даже если я жестко запрограммировал его следующим образом:

throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "some string");

Это класс исключения:

public class InvalidFormatException extends RuntimeException {

    public InvalidFormatException(String s1, String s2) {
        super(String.format("Invalid format: [s1: %s, s2: %s]", s1, s2));
    }
}

1 Ответ

19 голосов
/ 19 июня 2020

Это поведение было изменено в Spring Boot 2.3 и сделано намеренно. Подробнее см. примечания к выпуску .

Установка server.error.include-message=always в application.properties решает эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...