Pour répondre directement à votre question, @ResponseStatus
ne peut pas être utilisé pour envoyer différents statuts par une seule méthode.
Si vous veulent à utiliser @ResponseStatus
la façon dont vous pouvez gérer les statuts multiples :
- La méthode du contrôleur doit être annotée avec
@ResponseStatus
avec les 2xx HttpStatus
. Ce statut sera envoyé par la méthode du contrôleur dans le scénario de réussite. Habituellement, il est utilisé pour définir HttpStatus
autre que 200 (comme 201 ), comme 200 est le statut par défaut envoyé même sans utiliser @ResponseStatus
.
- Les méthodes de traitement des exceptions sont annotées avec
@ExceptionHandler
pour gérer les différents scénarios d'exception, également annotés avec l'option @ResponseStatus
avec les HttpStatus
. Par exemple, si vous voulez gérer un Ressource non trouvée la méthode du gestionnaire d'exception peut être annotée avec l'attribut @ResponseStatus(HttpStatus.NOT_FOUND)
pour renvoyer un 404 .
- Dans le cas où vous n'avez pas besoin d'envoyer une réponse d'erreur dynamique, vous pouvez même marquer la classe d'exception personnalisée avec l'option
@ResponseStatus
ainsi que les HttpStatus
et lorsque l'exception est levée (et non pas attrapée et avalée explicitement), la fonction correspondante HttpStatus
serait renvoyé.
Vous pouvez même tirer parti ResponseEntity
qui a un status
où vous pouvez passer la méthode HttpStatus
et de retour, soit dans la méthode du contrôleur, soit dans la méthode du gestionnaire d'exception, comme ci-dessous :
Méthode de contrôle :
@GetMapping("/resource")
public ResponseEntity<Object> getResource(){
if(resourcePresent){
return new ResponseEntity(resource, HttpStatus.OK);
} else {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
}
}
Méthode de traitement des exceptions :
@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Object> handleBadRequestException(BadRequestException exception){
return new ResponseEntity<>(customResponse, HttpStatus.BAD_REQUEST);
}