diff --git a/spring-boot-mvc/pom.xml b/spring-boot-mvc/pom.xml
index 617bc4c293..1c79a423bf 100644
--- a/spring-boot-mvc/pom.xml
+++ b/spring-boot-mvc/pom.xml
@@ -14,6 +14,15 @@
0.0.1-SNAPSHOT
../parent-boot-2
+
+
+
+
+ jcenter-snapshots
+ jcenter
+ http://oss.jfrog.org/artifactory/oss-snapshot-local/
+
+
@@ -34,7 +43,14 @@
org.springframework.boot
spring-boot-starter-thymeleaf
-
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
@@ -82,6 +98,18 @@
springfox-swagger-ui
${spring.fox.version}
+
+
+ io.springfox
+ springfox-data-rest
+ ${spring.fox.version}
+
+
+
+ io.springfox
+ springfox-bean-validators
+ ${spring.fox.version}
+
org.apache.tomcat.embed
@@ -117,7 +145,7 @@
- 2.9.2
+ 3.0.0-SNAPSHOT
1.10.0
2.3.7
diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java
index 68e2c55deb..434a8d77cb 100644
--- a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java
+++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java
@@ -1,22 +1,29 @@
package com.baeldung.swagger2boot.configuration;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import com.baeldung.swagger2boot.plugin.EmailAnnotationPlugin;
+
+import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.*;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
+import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
import java.util.Collections;
@Configuration
-@EnableSwagger2
-@ComponentScan("com.baeldung.swaggerboot.controller")
+@EnableSwagger2WebMvc
+@Import({SpringDataRestConfiguration.class, BeanValidatorPluginsConfiguration.class})
public class SpringFoxConfig {
private ApiInfo apiInfo() {
@@ -65,4 +72,8 @@ public class SpringFoxConfig {
.build();
}
+ @Bean
+ public EmailAnnotationPlugin emailPlugin() {
+ return new EmailAnnotationPlugin();
+ }
}
diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java
new file mode 100644
index 0000000000..b724031536
--- /dev/null
+++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/model/User.java
@@ -0,0 +1,58 @@
+package com.baeldung.swagger2boot.model;
+
+import javax.persistence.Id;
+import javax.validation.constraints.Email;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.persistence.Entity;
+
+@Entity
+public class User {
+
+ @Id
+ private Long id;
+
+ @NotNull(message = "First Name cannot be null")
+ private String firstName;
+
+ @Min(value = 15, message = "Age should not be less than 15")
+ @Max(value = 65, message = "Age should not be greater than 65")
+ private int age;
+
+ @Email(regexp=".@.\\..*", message = "Email should be valid")
+ private String email;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+}
diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java
new file mode 100644
index 0000000000..22ca144fb4
--- /dev/null
+++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/plugin/EmailAnnotationPlugin.java
@@ -0,0 +1,39 @@
+package com.baeldung.swagger2boot.plugin;
+
+import static springfox.bean.validators.plugins.Validators.annotationFromBean;
+
+import java.util.Optional;
+
+import javax.validation.constraints.Email;
+
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import springfox.bean.validators.plugins.Validators;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.schema.ModelPropertyBuilderPlugin;
+import springfox.documentation.spi.schema.contexts.ModelPropertyContext;
+
+@Component
+@Order(Validators.BEAN_VALIDATOR_PLUGIN_ORDER)
+public class EmailAnnotationPlugin implements ModelPropertyBuilderPlugin {
+
+ @Override
+ public boolean supports(DocumentationType delimiter) {
+ return true;
+ }
+
+ /**
+ * read Email annotation
+ */
+ @Override
+ public void apply(ModelPropertyContext context) {
+ Optional email = annotationFromBean(context, Email.class);
+ if (email.isPresent()) {
+ context.getBuilder().pattern(email.get().regexp());
+ context.getBuilder().example("email@email.com");
+ }
+ }
+
+}
+
diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java
new file mode 100644
index 0000000000..0cbffa06d4
--- /dev/null
+++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/repository/UserRepository.java
@@ -0,0 +1,11 @@
+package com.baeldung.swagger2boot.repository;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+import com.baeldung.swagger2boot.model.User;
+
+@Repository
+public interface UserRepository extends CrudRepository {
+
+}