Esta división ha sido analizado por expertos así garantizamos la veracidad de nuestra esta crónica.
Solución:
ResponseEntity
está destinado a representar la respuesta HTTP completa. Puede controlar todo lo que incluye: código de estado, encabezados y cuerpo.
@ResponseBody
es un marcador para el cuerpo de respuesta HTTP y @ResponseStatus
declara el código de estado de la respuesta HTTP.
@ResponseStatus
no es muy flexible Marca todo el método, por lo que debe asegurarse de que su método de controlador siempre se comporte de la misma manera. Y todavía no puedes configurar los encabezados. Necesitarías el HttpServletResponse
o un HttpHeaders
parámetro.
Básicamente, ResponseEntity
te permite hacer más.
Para completar la respuesta de Sotorios Delimanolis.
Es true ese ResponseEntity
le brinda más flexibilidad, pero en la mayoría de los casos no la necesitará y terminará con estos ResponseEntity
en todas partes de su controlador, lo que dificulta su lectura y comprensión.
Si desea manejar casos especiales como errores (No encontrado, Conflicto, etc.), puede agregar un HandlerExceptionResolver
a su configuración Spring. Entonces, en su código, simplemente lanza una excepción específica (NotFoundException
por ejemplo) y decida qué hacer en su controlador (estableciendo el estado HTTP en 404), lo que hace que el código del controlador sea más claro.
Según la documentación oficial: Creación de controladores REST con la anotación @RestController
@RestController es una anotación de estereotipo que combina @ResponseBody y @Controller. Más que eso, le da más significado a su controlador y también puede incluir semántica adicional en versiones futuras del marco.
Parece que es mejor usar @RestController
para mayor claridad, pero también puede combinar esto con ResponseEntity
para flexibilidad cuando sea necesario (según el tutorial oficial y el código aquí y mi pregunta para confirmarlo).
Por ejemplo:
@RestController
public class MyController
@GetMapping(path = "/test")
@ResponseStatus(HttpStatus.OK)
public User test()
User user = new User();
user.setName("Name 1");
return user;
es lo mismo que:
@RestController
public class MyController
@GetMapping(path = "/test")
public ResponseEntity test()
User user = new User();
user.setName("Name 1");
HttpHeaders responseHeaders = new HttpHeaders();
// ...
return new ResponseEntity<>(user, responseHeaders, HttpStatus.OK);
De esta manera, puede definir ResponseEntity
solo cuando sea necesario.
Actualizar
Puedes usar esto:
return ResponseEntity.ok().headers(responseHeaders).body(user);
Calificaciones y reseñas
Si tienes algún titubeo y disposición de aclarar nuestro crónica puedes añadir una acotación y con mucho placer lo estudiaremos.