Привет! В этой интсрукции мы посмотрим как создать первое и самое простое 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, то развернется список всех его методов.Клацайте, тыкайте, жмите и наслаждайтесь ))














Комментариев нет:
Отправить комментарий