Spring’s RequestBody и ResponseBody Аннотации

Spring's RequestBody и ResponseBody Аннотации

1. Вступление

В этой быстрой статье мы даем краткий обзор аннотаций Spring@RequestBody и@ResponseBody.

Дальнейшее чтение:

Руководство по отображению Spring Handler

В статье объясняется, как реализация HandlerMapping разрешает URL-адрес для конкретного обработчика.

Read more

Краткое руководство по пружинным контроллерам

Краткое и практическое руководство по Spring Controllers - как для типичных приложений MVC, так и для REST API.

Read more

Spring @Controller и @RestController Аннотации

Узнайте о различиях между аннотациями @Controller и @RestController в Spring MVC.

Read more

2. @RequestBodyс

Проще говоря, аннотация@RequestBody отображает телоHttpRequest на объект передачи или домена, обеспечивая автоматическую десериализацию входящего телаHttpRequest на объект Java.

Во-первых, давайте посмотрим на метод контроллера Spring:

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

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

Spring автоматически десериализует JSON в тип Java, предполагая, что указан соответствующий тип. По умолчанию тип, который мы аннотируем аннотацией@RequestBody, должен соответствовать JSON, отправляемому нашим клиентским контроллером:

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

Здесь объект, который мы используем для представления телаHttpRequest, отображается на наш объектLoginForm.

Давайте проверим это с помощью CURL:

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

Это все, что нужно для Spring REST API и клиента Angular, использующего аннотацию @RequestBody!

3. @ResponseBodyс

Аннотация@ResponseBody сообщает контроллеру, что возвращенный объект автоматически сериализуется в JSON и передается обратно в объектHttpResponse.

Предположим, у нас есть собственный объектResponse:

public class ResponseTransfer {
    private String text;

    // standard getters/setters
}

Далее, связанный контроллер может быть реализован:

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

    @Autowired
    ExampleService exampleService;

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

В консоли разработчика нашего браузера или с помощью такого инструмента, как Postman, мы можем увидеть следующий ответ:

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

Remember, we don’t need to annotate the @RestController-annotated controllers with the @ResponseBody annotation, так как здесь это делается по умолчанию.

4. Заключение

Мы создали простой клиент Angular для приложения Spring, который демонстрирует, как использовать аннотации@RestController и@ResponseBody.

Как всегда доступны образцы кодаover on GitHub.