spring-boot
Spring-Boot Microservice con JPA
Ricerca…
Classe di applicazione
package com.mcf7.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringDataMicroServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDataMicroServiceApplication.class, args);
}
}
Modello del libro
package com.mcf7.spring.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
@lombok.Getter
@lombok.Setter
@lombok.EqualsAndHashCode(of = "isbn")
@lombok.ToString(exclude="id")
@Entity
public class Book implements Serializable {
public Book() {}
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private long id;
@NotNull
@Size(min = 1)
private String isbn;
@NotNull
@Size(min = 1)
private String title;
@NotNull
@Size(min = 1)
private String author;
@NotNull
@Size(min = 1)
private String description;
}
Solo un appunto dato che qui stanno succedendo alcune cose, volevo abbatterle molto velocemente.
Tutte le annotazioni con @lombok stanno generando parte della piastra della nostra classe
@lombok.Getter //Creates getter methods for our variables
@lombok.Setter //Creates setter methods four our variables
@lombok.EqualsAndHashCode(of = "isbn") //Creates Equals and Hashcode methods based off of the isbn variable
@lombok.ToString(exclude="id") //Creates a toString method based off of every variable except id
Abbiamo anche sfruttato la validazione in questo oggetto
@NotNull //This specifies that when validation is called this element shouldn't be null
@Size(min = 1) //This specifies that when validation is called this String shouldn't be smaller than 1
Repository libro
package com.mcf7.spring.domain;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface BookRepository extends PagingAndSortingRepository<Book, Long> {
}
Schema base del repository Spring, tranne che abbiamo abilitato un repository di paging e smistamento per funzionalità extra come .... paging e ordinamento :)
Abilitazione della convalida
package com.mcf7.spring.domain;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
public class BeforeCreateBookValidator implements Validator{
public boolean supports(Class<?> clazz) {
return Book.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
errors.reject("rejected");
}
}
Caricamento di alcuni dati di test
package com.mcf7.spring.domain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class DatabaseLoader implements CommandLineRunner {
private final BookRepository repository;
@Autowired
public DatabaseLoader(BookRepository repository) {
this.repository = repository;
}
public void run(String... Strings) throws Exception {
Book book1 = new Book();
book1.setIsbn("6515616168418510");
book1.setTitle("SuperAwesomeTitle");
book1.setAuthor("MCF7");
book1.setDescription("This Book is super epic!");
repository.save(book1);
}
}
Semplicemente caricando alcuni dati di test idealmente questo dovrebbe essere aggiunto solo sotto un profilo di sviluppo.
Aggiungere il validatore
package com.mcf7.spring.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
public class RestValidationConfiguration extends RepositoryRestConfigurerAdapter {
@Bean
@Primary
/**
* Create a validator to use in bean validation - primary to be able to autowire without qualifier
*/
Validator validator() {
return new LocalValidatorFactoryBean();
}
@Override
public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
Validator validator = validator();
//bean validation always before save and create
validatingListener.addValidator("beforeCreate", validator);
validatingListener.addValidator("beforeSave", validator);
}
}
Gradle Build File
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'io.spring.gradle:dependency-management-plugin:0.5.4.RELEASE'
}
}
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'
apply plugin: 'java'
dependencyManagement {
imports {
mavenBom 'io.spring.platform:platform-bom:2.0.5.RELEASE'
}
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-web'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'org.springframework.boot:spring-boot-starter-data-rest'
compile 'org.springframework.data:spring-data-rest-hal-browser'
compile 'org.projectlombok:lombok:1.16.6'
compile 'org.springframework.boot:spring-boot-starter-validation'
compile 'org.springframework.boot:spring-boot-actuator'
runtime 'com.h2database:h2'
testCompile 'org.springframework.boot:spring-boot-starter-test'
testCompile 'org.springframework.restdocs:spring-restdocs-mockmvc'
}
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow