Spring
Gérer différents code de retour HTTP dans Spring MVC
Avec Spring MVC, on peut gérer les codes retour très simplement avec l'annotation @ResponseStatus qui permet de définir un code retour à chaque requête :
@RestController
@RequestMapping("/api/entity")
public class EntityController {
@Autowired
private EntityService entityService;
@RequestMapping(value = "/get/{id}", method = GET, produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseStatus(value = HttpStatus.OK)
public List<Entity> get(@PathVariable("id") String id) {
LOGGER.info("Search entity by Id : {}", id);
return this.entityService.get(id);
}
}
Mais parfois, on souhaite distinguer plusieurs cas de gestion lors d'une réponse. Et l'on est alors susceptible de devoir retourner plusieurs code statut HTTP différents. L'usage de la classe ResponseEntity permet de répondre une valeur générique mais différente pour chacun des cas. Elle évite notamment de devoir créer sa propre classe Response :
@RestController
@RequestMapping("/api/entity")
public class EntityController {
@Autowired
private EntityService entityService;
@RequestMapping(value = "/get/{id}", method = GET, produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity get(@PathVariable("id") String id) {
LOGGER.info("Search entity by Id : {}", id);
if(id != null) {
return new ResponseEntity<>(this.entityService.get(id), HttpStatus.OK);
}
else {
LOGGER.info("An attempt to get en entity with null id has be identified.");
return new ResponseEntity<>(this.entityService.get(id), HttpStatus.NO_CONTENT);
}
}
}