enrique-j
12/27/2017 - 8:48 PM

ResponseBody

@RequestBody En pocas palabras, la anotación @RequestBody asigna el cuerpo HttpRequest a un objeto de transferencia u objeto de dominio, lo que permite la deserialización automática del cuerpo HttpRequest entrante en un objeto Java.

Primero, echemos un vistazo a un método de controlador Spring:

@PostMapping("/request") public ResponseEntity postController( @RequestBody LoginForm loginForm) {

exampleService.fakeAuthenticate(loginForm);
return ResponseEntity.ok(HttpStatus.OK);

} Spring deserializa automáticamente el JSON en un tipo Java suponiendo que se especifica uno apropiado. De manera predeterminada, el tipo que anotamos con la anotación @RequestBody debe corresponderse con el JSON enviado desde nuestro controlador del lado del cliente:

public class LoginForm { private String username; private String password; // ... } Aquí, el objeto que utilizamos para representar el cuerpo HttpRequest se correlaciona con nuestro objeto LoginForm .

Probemos esto usando CURL:

1 2 3 4 curl -i
-H "Accept: application/json"
-H "Content-Type:application/json"
-X POST --data '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request" ¡Esto es todo lo que se necesita para una API REST de Spring y un cliente angular que usa la anotación @ RequestBody !

  1. @ResponseBody La anotación @ResponseBody le dice a un controlador que el objeto devuelto se serializa automáticamente en JSON y se devuelve al objeto HttpResponse .

Supongamos que tenemos un objeto de respuesta personalizado :

1 2 3 4 5 public class ResponseTransfer { private String text;

// standard getters/setters

} A continuación, el controlador asociado se puede implementar:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Controller @RequestMapping("/post") public class ExamplePostController {

@Autowired
ExampleService exampleService;

@PostMapping("/response")
@ResponseBody
public ResponseTransfer postResponseController(
  @RequestBody LoginForm loginForm) {
    return new ResponseTransfer("Thanks For Posting!!!");
 }

} En la consola de desarrollador de nuestro navegador o utilizando una herramienta como Cartero, podemos ver la siguiente respuesta:

1 {"text":"Thanks For Posting!!!"} Recuerde, no es necesario que anotemos los controladores anotados por @ RestController con la anotación @ResponseBody, ya que aquí se hace de forma predeterminada.

  1. Conclusión Hemos creado un cliente angular simple para la aplicación Spring que muestra cómo usar las anotaciones @RestController y @ResponseBody .