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.