JavaRush /Blog Jawa /Random-JV /Spring — это не страшно. Контролируем свой REST
Павел
tingkat

Spring — это не страшно. Контролируем свой REST

Diterbitake ing grup
СОДЕРЖАНИЕ ЦИКЛА СТАТЕЙ Переиспользование чужого труда — это святое дело для любого разработчика 😌 Whatбы двигаться дальше, необходимо понимать основы компьютерной сети, вот серия статей. Обратите внимание на основные моменты: принцип работы HTTP, что такое GET, POST, PUT, статусы ответов, MVC , про JSON и сериализацию читайте отдельно. Будет полезно реализовать предложенный пример с сервлетами, это поможет полюбить spring-boot всей душой. Пример applications на spring-boot из данного цикла, довольно прост, но он поможет понять суть MVC. Ниже будет link на проект по интереснее. Для ознакомления с REST и использованием его в Spring прочитайте, вот эти три статьи. В первой статье почитаете что такое REST. Во второй статье говориться о requestах и ответах, обязательно прочитайте и примите к сведению комментарий товарища Fidel. В третьей статье будет предложен практический пример реализации на Spring, подход к созданию applications не много другой (полезно посмотреть и сравнить), реализуйте его. Обратите внимание на место где говориться про HttpStatus, ResponseEntity <?> (если <?> вводит в ступор, то читайте главу 13. Обобщения из "Java. Руководство для начинающих", Герберт Шилдт ), в этой же статье почитайте про POSTMAN (дополнительно короткое видео про него) установите POSTMAN, все возможности вам не нужны, посмотрите, How создавать различные requestы. В примере встречаются тернарные операторы , освежите в памяти, если забыли. Обратите внимание на то, How в примере статьи реализовано внедрение бинов с использованием @Autowired

@RestController
public class ClientController {

   private final ClientService clientService;

   @Autowired
   public ClientController(ClientService clientService) {
       this.clientService = clientService;
   }
}
Необходимо знать, что начиная с версии Spring 4.3 аннотацию @Autowired можно опустить, если у класса всего один конструктор. О том, что в конструкторе надо внедрить бин, фреймворк догадается сам. Подробнее можно прочитать в этом источнике. И если вы будете внимательны, то у вас должен возникнуть вопрос по структуре пакета service, а именно: зачем там interface ClientService и public class ClientServiceImpl – это правильная практика, позднее, мы поговорим зачем она нужна и будем ее использовать. Со статьями всё. Прежде чем читать, давайте по пишем. Как говориться: «Ни дня без codeа!» Для затравки создадим простой GET requestик. В прошлый раз мы написали приложение для спекуляции овощами, git clone https://FromJava@bitbucket.org/FromJava/speculation.git git clone git@bitbucket.org:FromJava/speculation.git Открываем приложение, и в пакете ru.java.rush создадим пакет controllers (здесь будут располагаться контролеры из паттерна MVC). Создаем класс public class ProductController

@RestController
@RequestMapping("/speculation")
public class ProductController {

}
Аннотация @RestController – указывает Spring что это рест-контроллер. @RequestMapping – все методы контроллера будут получать requestы с URI, который будет начинаться строкой, указанной в скобках аннотации ("/speculation"). Пишем в классе следующий метод

@GetMapping("/simple")
public String simple(){
    return "Легкий GET requestик";
}
Запускаем проект, в строке браузера набираем: http://localhost:8080/speculation/simple Получаем ответ: Легкий GET requestик Немного объяснений: 1. Мы создали класс, который пометor @RestController How контроллер, указали к нему путь @RequestMapping ("/speculation") – эта annotation является не обязательной, без нее путь будет начинаться с "/". 2. Мы создали метод, который при выполнении возвращает строку (Легкий GET requestик), пометor его аннотацией @GetMapping (что этот метод именно для GET requestов) и указали к методу путь ("/simple") 3. Запустor проект (server) на порту 8080, и сделали GET request по addressу: server/ контроллер/метод (http://localhost:8080/speculation/simple) 4. По данному requestу отработал метод public String simple(){ return "Легкий GET requestик"; } 5. Результат работы метода вернулся в браузер в виде строки "Легкий GET requestик". Ну что, начало положено! Вас ждут увлекательнейшие стати. Освоение предложенного выше материала займет не один день, здесь торопиться не надо, эта тема очень важна и ее необходимо понять, «ешьте слона по частям». Для тренировки(после освоения материала): Дополните контроллер applications speculation . Создайте методы: 1) Поиск товара по id Используйте метод productService.findById(); Пример вывода

{
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": null,
        "salePrice": null
 }
После реализации остальных методов контроллера, подумайте: "Почему в двух последних полях стоят null? What нужно сделать, что бы там оказались Howие нибудь значения?" 2) Просмотр всех продуктов на витрине: Для поиска всех продуктов используйте метод productService.findAll(); Для заполнения полей упаковки и наценки используйте productService.pack(); productService.makeMoney(); на выводе должен быть массив JSON-ов с перечислением товаров, пример:

[
    {
        "id": 1,
        "name": "Картофель",
        "purchasePrice": 20,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 100
    },
    {
        "id": 2,
        "name": "Морковь",
        "purchasePrice": 14,
        "packaging": "Упаковано в лучшем виде",
        "salePrice": 70
    }
]
3) Добавления нового товара в БД (добавьте товар:капуста и цену оптовой закупки) Используйте: productService.save(); Метод должен вернуть соответствующий Http статус. 4) Удаления товара по id Для этого, сначала реализуйте в ProductService метод, содержащий productRepository.deleteById(); А затем, используйте его в контроллере. Метод контроллера должен вернуть соответствующий Http статус. 5) Изменения товара по id (изменение оптовой цены товара и наименования товара) Эта операция будет по сложнее предыдущих. Сначала необходимо найти товар, который мы хотим изменить по id Используйте productService.findById(); Затем, в найденном товаре (an object) замените meaning полей, на meaning полей an object, полученного в теле Put requestа (an object_json) Это можно сделать примерно так:

найденный_товар = productService.findById(id);
найденный_товар.setName(an object_json.getName);
найденный_товар.setPurchasePrice(an object_json.getPurchasePrice);
После этого измененный товар необходимо сохранить productService.save(найденный_товар); Метод должен вернуть соответствующий Http статус. Если с этим методом возникнут проблемы, то можно погуглить «put request java», интернет еще никто не отменял) Работа с контроллерами на этом не заканчивается, впереди еще много тем…
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION