Статьи

Как разрабатывать веб-сервисы RESTful с использованием MySQL и Spring Boot

Spring Boot — это самый быстрый способ разработки весеннего приложения. Давайте посмотрим, как разработать такое приложение, которое использует базу данных MySQL для хранения пути текстовых файлов и файлов изображений, а затем использует Spring MVC в качестве архитектурного шаблона и веб-службы Spring RESTful для извлечения изображений и текста. Все это будет сделано с помощью Spring Boot.

Шаг 1: Изменения в Spring Boot

[1] В среде IDE, такой как STS, выберите NEW-> Project -> Spring Starter Project.

[2] Мы получим экран, как показано ниже (укажите названия пакетов проектов по желанию, нажмите «Далее»): 

[3] Выберите «Зависимости проекта Spring» как MySQL, JPA и Web. Нажмите Готово: 

[4] Мы получим структуру проекта, как показано ниже: 

Здесь мы получили приложение Spring Boot, которое использует функции

1. JPA: чтобы мы могли отображать Java-сущности / классы с помощью таблиц MySQL. 

2. MySQL: здесь мы используем базу данных MySQL.

3. Интернет: эта зависимость помогает нам получать спокойные конечные точки для получения изображений и текста в веб-браузере. 

Шаг 2: Изменения в соответствии с архитектурой Spring MVC 

 Следующим шагом будет использование Spring MVC Architecture и разработка нашего уровня контроллера, Dao и уровня обслуживания. 

[1] Контроллер: ApplicationController.java

@RestController
@RequestMapping(value = "/application")
public class ApplicationController {

@Autowired
private ApplicationService applicationService;

@RequestMapping(value = "/get-image", method = RequestMethod.GET)
public ResponseEntity<byte[]> getImagePath() throws IOException {
ResponseEntity<byte[]> responseEntity = applicationService.getImageURL();
return responseEntity;
}

@RequestMapping(value = "/get-text", method = RequestMethod.GET)
public ResponseEntity<byte[]> getTextPath() throws IOException {
ResponseEntity<byte[]> responseEntity = applicationService.getTextData();
return responseEntity;
}
}

[2] ApplicationDao.java: 

public interface ApplicationDao extends CrudRepository<RequestData,Integer> {
@Query(value = "SELECT * FROM resource_table WHERE File_id=?1", nativeQuery = true)
  RequestData findResource(Integer i);
}

[3] ApplicationService.java: (Примечание: я использую 1 в качестве аргумента для findResource, поскольку я буду создавать только одну запись в БД, эта логика может быть изменена в соответствии с требованием, например, findResourceByDate и т. Д.).

@Service
public class ApplicationService {

@Autowired
private ApplicationDao applicationDao;

public ResponseEntity<byte[]> getImageURL() throws IOException {

RequestData requestData = applicationDao.findResource(1);
String imagePath = requestData.getImages();

RandomAccessFile f = new RandomAccessFile(imagePath, "r");
byte[] b = new byte[(int) f.length()];
f.readFully(b);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
return new ResponseEntity<byte[]>(b, headers, HttpStatus.CREATED);
}

public ResponseEntity<byte[]> getTextData() throws IOException {
RequestData requestData = applicationDao.findResource(1);
String s = requestData.getContents();

RandomAccessFile f = new RandomAccessFile(s, "r");
byte[] b = new byte[(int) f.length()];
f.readFully(b);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
return new ResponseEntity<byte[]>(b, headers, HttpStatus.CREATED);
}

}

[4] Java-класс, который будет сопоставлен с MySQL Table (имя может быть изменено согласно требованию):


@Entity
@Table(name = "resource_table")

public class RequestData {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "File_id")
private String id;

@Column(name = "Images_path")
private String images;

@Column(name = "Text_path")
private String Contents;

// getter-setters

}

Наконец, полная структура проекта должна выглядеть так: 

В файле application.properties внесите следующие изменения: 

spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?autoReconnect=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql = true

spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15

Шаг 3: Изменения в MySQL 

Я использую MySQL для демонстрации. БД может измениться согласно требованию. Ниже приведены пример схемы, таблицы и данные вставки:

У меня есть образец текстового файла (с некоторым текстом) и файл изображения (логотип Spring Boot) на локальном диске (E Drive). 

Шаг 4: Рендеринг текста и изображений в браузере

[1] Запустите приложение весенней загрузки, как показано ниже: 

В журналах вы увидите: 

2018-07-16 01:29:15.513  INFO 12640 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-07-16 01:29:15.584  INFO 12640 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2018-07-16 01:29:15.594  INFO 12640 --- [           main] com.boot.BootAngularRestApplication      : Started BootAngularRestApplication in 3.478 seconds (JVM running for 4.488)

Tomcat запущен на порту 8080.

[2] В веб-браузере, например Chrome, введите следующий URL: 

[2.1] http: // localhost: 8080 / application / get-image     

Вы получите следующий вывод: 

[2.2] http: // localhost: 8080 / application / get-text: 

Надеюсь, это поможет, спасибо!