使用自定义消息 return 自定义 ResponseEntity<>(HttpStatus.BAD_REQUEST) 的最简单方法?

Easiest way to return a custom ResponseEntity<>(HttpStatus.BAD_REQUEST) with custom message?

这是我第一次用 Spring Boot 开发 REST API。我想在遇到 Bad Request 400 错误时 return 自定义消息。

我有我的控制器:

@GetMapping("/DetailDossier/{id},{parameters}/")
public ResponseEntity<List<DetailDossierRspn>> DetailDossierQstn(
        @PathVariable(value = "id") String[] id, @PathVariable(value = "parameters") String parameters,
         throws ParseException {
    List<DetailDossierRspn> rspn = new ArrayList<>();

    WSDetailDossierService mainDAO = new WSDetailDossierService();

// If Sql result return -> List<DetailDossierRspn>

// If no sql result return null

    rspn = mainDAO.initialiserDAO(identifiant, coetb, null);
    if (rspn == null) {
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    } else {
        return ResponseEntity.ok(rspn);
    }
}

我想要 return 400 错误的最简单方法:

ResponseEntity<>(HttpStatus.BAD_REQUEST)

带有自定义消息。

我试图创建一个@ControllerAdvice,但它没有用,因为我的控制器 return a List

有没有办法轻松创建自定义消息?

您需要创建自定义 @ControllerAdvice:

Specialization of @Component for classes that declare @ExceptionHandler, @InitBinder, or @ModelAttribute methods to be shared across multiple @Controller classes.

扩展 ResponseEntityExceptionHandler:

A convenient base class for @ControllerAdvice classes that wish to provide centralized exception handling across all @RequestMapping methods through @ExceptionHandler methods.

基本上是这样的:

@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        return new ResponseEntity<>("my custom message", status);
    }

}