Инструкция по созданию бизнесобъектов. Strategy это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми
Скачать 0.73 Mb.
|
39. Что такое responseBody, requestBody, ResponseEntity?ResponseEntity представляет собой специальный класс, который представляет http-ответ. Он содержит тело ответа, код состояния, заголовки. Мы можем использовать его для более тонкой настройки http-ответа. @GetMapping("/{id}") public ResponseEntity> getUser(@PathVariable long id, @ModelAttribute("user") User user) { return new ResponseEntity<>(userService.getUser(id), HttpStatus.OK); } ResponseEntity необходим, только если мы хотим кастомизировать ответ. Во всех остальных случаях достаточно использовать. @ResponseEntity необходим, только если мы хотим кастомизировать ответ, добавив к нему статус. Если мы хотим использовать ResponseEntity, то просто должны вернуть его из метода, Spring позаботится обо всем остальном. Если клиент ждет от нас JSON/XML, мы можем параметризовать ResponseEntity конкретным классом и добавить к ответу заголовки и Http статус. Аннотация @ResponseBody дает фреймворку понять, что объект, который вернули метода надо прогнать через HttpMessageConverter, чтобы получить готовое к отправке на клиент представление. В этот момент происходит обратная сериализация сущности в HttpResponse. Контроллер использует Jackson message converter для конвертации входящих/исходящих данных. Как правило целевые данные представлены в json или xml. @RequestBody используется для возврата и записи объекта прямо в тело HTTP-ответа, в соответствии с заголовком HTTP-запроса. HTTP-запрос кроме заголовков и параметров имеет также основную часть - тело запроса. Ее содержимое также может быть распознано как параметр в методе контроллера. Для того, чтобы это произошло, необходимо указать @RequestBody в объявлении этого параметра. Spring автоматически десериализует HttpRequest в тип Java, если указан соответствующий тип. 40. Что такое AJAX/fetch?AJAX (Asynchronous Javascript and XML) – это ассинхронный подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся быстрее и удобнее. Короче говоря, это означает, что можно обновлять части веб-страницы без перезагрузки всей страницы (URL-адрес остается прежним). Метод fetch() – это XMLHttpRequest нового поколения. Он предоставляет улучшенный интерфейс для осуществления запросов к серверу: как по части возможностей и контроля над происходящим, так и по синтаксису, так как построен на промисах (объект, представляющий результат успешного или неудачного завершения асинхронной операции). 41. Чем аннотация RestController отличается от Controller?@RestController – это просто сокращенная запись для @Controller + @ResponseBody. Но если говорить чуть подробнее, то: @Controller: эта аннотация – это всего лишь специализированная версия @Component, и она позволяет автоматически обнаруживать классы контроллеров на основе сканирования classpath. @RestController: эта аннотация является специализированной версией @Controller, которая автоматически добавляет @Controller и @ResponseBody аннотации, поэтому нам не нужно добавлять @ResponseBody к нашим методам отображения. Основная разница между традиционным Spring MVC контроллером и RESTfull веб-сервис контроллером заключается в способе создания тела HTTP ответа. MVC контроллер опирается на технологию View, а RESTfull веб сервис контроллер возвращает объект, который представляется в HTTP ответе в виде JSON или XML. @RestController превращает помеченный класс в Spring- бин. Этот бин для конвертации входящих/исходящих данных использует Jackson message converter. @Controller - Возвращает страницу и данные при помощи шаблонизаторов JSP вроде Thymeleaf. @RestController - Возвращает данные. Используется с JSON или XML. Позволяет применять технологии без перезагрузки веб страниц, на основе JS. Для того, чтобы настроить @RestController на возвращение JSON или XML используются Jackson зависимости. При отправке данных с фронта в рестконтроллер нужно в заголовке(header) указать тип возвращаемого/отправляемого тела запроса. Например, ContentType или accept: "application/json" |