Anotações RequestBody e ResponseBody da Primavera
1. Introdução
Neste artigo rápido, fornecemos uma visão geral concisa das anotações Spring@RequestBodye@ResponseBody.
Leitura adicional:
Guia de mapeamentos de manipulador de primavera
O artigo explica como a implementação do HandlerMapping resolve a URL de um manipulador específico.
Guia rápido para controladores de mola
Um guia rápido e prático para Spring Controllers - tanto para aplicativos MVC típicos quanto para APIs REST.
As anotações Spring @Controller e @RestController
Aprenda sobre as diferenças entre as anotações @Controller e @RestController no Spring MVC.
2. @RequestBody
Simplificando, a anotação@RequestBody mapeia o corpoHttpRequest para uma transferência ou objeto de domínio, permitindo a desserialização automática do corpoHttpRequest de entrada em um objeto Java.
Primeiro, vamos dar uma olhada em um método de controlador Spring:
@PostMapping("/request")
public ResponseEntity postController(
@RequestBody LoginForm loginForm) {
exampleService.fakeAuthenticate(loginForm);
return ResponseEntity.ok(HttpStatus.OK);
}
O Spring desserializa automaticamente o JSON para um tipo Java, assumindo que um apropriado seja especificado. Por padrão, o tipo que anotamos com a anotação@RequestBody deve corresponder ao JSON enviado de nosso controlador do lado do cliente:
public class LoginForm {
private String username;
private String password;
// ...
}
Aqui, o objeto que usamos para representar o corpo deHttpRequest mapeia para nosso objetoLoginForm.
Vamos testar isso usando CURL:
curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data
'{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"
Isso é tudo o que é necessário para uma API Spring REST e um cliente Angular usando a anotação @RequestBody!
3. @ResponseBody
A anotação@ResponseBody diz a um controlador que o objeto retornado é serializado automaticamente em JSON e passado de volta para o objetoHttpResponse.
Suponha que temos um objetoResponse personalizado:
public class ResponseTransfer {
private String text;
// standard getters/setters
}
Em seguida, o controlador associado pode ser implementado:
@Controller
@RequestMapping("/post")
public class ExamplePostController {
@Autowired
ExampleService exampleService;
@PostMapping("/response")
@ResponseBody
public ResponseTransfer postResponseController(
@RequestBody LoginForm loginForm) {
return new ResponseTransfer("Thanks For Posting!!!");
}
}
No console do desenvolvedor do nosso navegador ou usando uma ferramenta como o Postman, podemos ver a seguinte resposta:
{"text":"Thanks For Posting!!!"}
Remember, we don’t need to annotate the @RestController-annotated controllers with the @ResponseBody annotation, pois é feito por padrão aqui.
4. Conclusão
Nós construímos um cliente Angular simples para o aplicativo Spring que demonstra como usar as anotações@RestControllere@ResponseBody.
Como sempre, as amostras de código estão disponíveisover on GitHub.