Spring's RequestBody и ResponseBody Аннотации
1. Вступление
В этой быстрой статье мы даем краткий обзор аннотаций Spring@RequestBody и@ResponseBody.
Дальнейшее чтение:
Руководство по отображению Spring Handler
В статье объясняется, как реализация HandlerMapping разрешает URL-адрес для конкретного обработчика.
Краткое руководство по пружинным контроллерам
Краткое и практическое руководство по Spring Controllers - как для типичных приложений MVC, так и для REST API.
Spring @Controller и @RestController Аннотации
Узнайте о различиях между аннотациями @Controller и @RestController в Spring MVC.
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.