Привет! В этой интсрукции мы посмотрим как создать первое и самое простое Spring Boot приложение в IntelliJ IDEA. Чтобы было интереснее сделаем на базе этого приложение простенький REST API и для его тестирование подключим Swagger.
Итак, вперед!
Тут заполняем свойства нашего Maven проекта, project type, packaging, java version, groupid, artifactid и т.д.
Далее необходио выбрать версию Spring Boot и ависимости проекта, для данного проекта будет достаточно Web.
Придумываем имя проекта и Finish.
На данном этаме, после загрузки проекта, будет предложено добавить pom.xml в проект Maven, нажимаем "Add as Maven Project", после чего можно увидеть, что в проекте есть много всяких Maven зависимостей, которые автоматически синхронизируются с build path, спасибо Spring Boot!
Смотрим, что получилось.
Откроем pop.xml
Итак, вперед!
Создаем новое приложение и выбираем тип Spring Initializr:
Тут заполняем свойства нашего Maven проекта, project type, packaging, java version, groupid, artifactid и т.д.
Далее необходио выбрать версию Spring Boot и ависимости проекта, для данного проекта будет достаточно Web.
Придумываем имя проекта и Finish.
На данном этаме, после загрузки проекта, будет предложено добавить pom.xml в проект Maven, нажимаем "Add as Maven Project", после чего можно увидеть, что в проекте есть много всяких Maven зависимостей, которые автоматически синхронизируются с build path, спасибо Spring Boot!
Смотрим, что получилось.
Откроем pop.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.test</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>App</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--Swagger--> <dependency> <groupId>com.wordnik</groupId> <artifactId>swagger-annotations</artifactId> <version>1.3.12</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency> <!--Swagger--> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Я сразу добавил сюда зависимости для Swagger (смотреть коммент <!--Swagger-->). После того, как добавляется новая зависимость, то idea спросит о следующем, как импортировать зависимости:
позволим ему заниматься автоимпортом зависимостей.
Дальше я в файле application.properties добавил следующее свойство:
server.port=8070
что означает, что наш api будет доступен по этому порту. Зачем? Чтобы было интереснее, ну и не путаться с портом по умолчанию (8080).
Идем дальше. Создадим наш контроллер ApiController в пакете controllers.
package demo.web.controllers; import demo.model.DemoModel; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api-demo") public class ApiController { @RequestMapping(value = "/test/{message}", method = RequestMethod.GET) public String test(@PathVariable("message") String message) { return String.format("Hi There, you sent %s", message); } @RequestMapping(value = "/newmodel", method = RequestMethod.GET) public DemoModel newModel() { return new DemoModel(123, "new modelName"); } }
Тут у нас есть два метода, которые принимаю GET запросы, в аннотации @RequestMapping параметр value задает значение url, по которому должен вызываться метод нашего api.
Метод test в запросе принимает значение параметра message, которое затем возвращается пользователю в виде строки "Hi There, you sent {your message from GET request}"
Второй метод вернет нам объект DataModel в формате jason, ниже представлен код класса DataModel в пакете model
package demo.model; public class DemoModel { int id; String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public DemoModel(int id, String name) { this.id = id; this.name = name; } }
На данный момент можно запускать наше приложение, для этого есть несколько вариантов. Для запуска необходимо создать run configuration, так вот можно это сделать ручками:
Или же выпоолнить следующие действия и конфиг создасться автоматически:
Пускаем!!!
и сразу можем зайти через браузер по адресу http://localhost:8070/api-demo/test/hello
если вы в конфиге не меняли server.port на 8070, то у вас будет дефлтный 8080Результат
Теперь давайте попробуем Swagger, идем по адресу http://petstore.swagger.io/
и вставляем следующую строку с адресом и жмем Explore
ииии...правильно НИЧЕГО! Получаем
Can't read from server. It may not have the appropriate access-control-origin settings.
Чтобы все заработало надо обязательно в классе AppApplication добавить аннотации
и добавить класс SimpleCORSFilter:@SpringBootApplication@EnableSwagger2@Configuration
package demo; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class SimpleCORSFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with, origin, content-type, accept"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) { } @Override public void destroy() { } }перезапускаем проект и пробуем повторить тоже самое на Swagger. Если нажать на api-controller, то развернется список всех его методов.
Клацайте, тыкайте, жмите и наслаждайтесь ))
Комментариев нет:
Отправить комментарий