Spring’s RequestBody et ResponseBody Annotations

Les annotations RequestBody et ResponseBody de Spring

1. introduction

Dans cet article rapide, nous fournissons un aperçu concis des annotations Spring@RequestBody et@ResponseBody.

Lectures complémentaires:

Guide des mappages de gestionnaires de printemps

Cet article explique comment l’implémentation de HandlerMapping permet de résoudre l’URL d’un gestionnaire particulier.

Read more →

Guide rapide des contrôleurs de ressort

Guide rapide et pratique sur les contrôleurs de ressort, à la fois pour les applications MVC typiques et pour les API REST.

Read more →

Les annotations Spring @Controller et @RestController

Découvrez les différences entre les annotations @Controller et @RestController dans Spring MVC.

Read more →

2. @RequestBody

En termes simples, l'annotation@RequestBody mappe le corps deHttpRequest à un objet de transfert ou de domaine, permettant la désérialisation automatique du corps entrant deHttpRequestur un objet Java.

Tout d'abord, examinons une méthode de contrôleur Spring:

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

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

Spring désérialise automatiquement le JSON en un type Java en supposant qu'un type approprié soit spécifié. Par défaut, le type que nous annotons avec l'annotation@RequestBody doit correspondre au JSON envoyé depuis notre contrôleur côté client:

public class LoginForm {
    private String username;
    private String password;
    // ...
}

Ici, l'objet que nous utilisons pour représenter le corps deHttpRequest correspond à notre objetLoginForm.

Testons ceci en utilisant CURL:

curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data
  '{"username": "johnny", "password": "password"}' "https://localhost:8080/.../request"

C'est tout ce qui est nécessaire pour une API Spring REST et un client Angular utilisant l'annotation @RequestBody!

3. @ResponseBody

L'annotation@ResponseBody indique au contrôleur que l'objet renvoyé est automatiquement sérialisé dans JSON et renvoyé dans l'objetHttpResponse.

Supposons que nous ayons un objetResponse personnalisé:

public class ResponseTransfer {
    private String text;

    // standard getters/setters
}

Ensuite, le contrôleur associé peut être implémenté:

@Controller
@RequestMapping("/post")
public class ExamplePostController {

    @Autowired
    ExampleService exampleService;

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

Dans la console du développeur de notre navigateur ou en utilisant un outil tel que Postman, nous pouvons voir la réponse suivante:

{"text":"Thanks For Posting!!!"}

Remember, we don’t need to annotate the @RestController-annotated controllers with the @ResponseBody annotation car c'est fait par défaut ici.

4. Conclusion

Nous avons créé un client angulaire simple pour l'application Spring qui montre comment utiliser les annotations@RestController et@ResponseBody.

Comme toujours, des échantillons de code sont disponiblesover on GitHub.