Anotações RequestBody e ResponseBody da Primavera

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.

Read more

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.

Read more

As anotações Spring @Controller e @RestController

Aprenda sobre as diferenças entre as anotações @Controller e @RestController no Spring MVC.

Read more

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.