From 96aca9fb7c370a4d439c17e4f21ee4599e510644 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 5 Oct 2015 21:15:19 +0200 Subject: [PATCH] json api --- spring-katharsis/.classpath | 31 +++++++ spring-katharsis/.project | 29 ++++++ spring-katharsis/.springBeans | 13 +++ spring-katharsis/pom.xml | 75 +++++++++++++++ .../main/java/org/baeldung/Application.java | 14 +++ .../src/main/java/org/baeldung/Setup.java | 25 +++++ .../persistence/dao/UserRepository.java | 8 ++ .../persistence/katharsis/JsonApiFilter.java | 40 ++++++++ .../katharsis/UserResourceRepository.java | 42 +++++++++ .../org/baeldung/persistence/model/User.java | 91 +++++++++++++++++++ .../src/main/resources/application.properties | 6 ++ .../org/baeldung/test/JsonApiLiveTest.java | 29 ++++++ 12 files changed, 403 insertions(+) create mode 100644 spring-katharsis/.classpath create mode 100644 spring-katharsis/.project create mode 100644 spring-katharsis/.springBeans create mode 100644 spring-katharsis/pom.xml create mode 100644 spring-katharsis/src/main/java/org/baeldung/Application.java create mode 100644 spring-katharsis/src/main/java/org/baeldung/Setup.java create mode 100644 spring-katharsis/src/main/java/org/baeldung/persistence/dao/UserRepository.java create mode 100644 spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/JsonApiFilter.java create mode 100644 spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/UserResourceRepository.java create mode 100644 spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java create mode 100644 spring-katharsis/src/main/resources/application.properties create mode 100644 spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java diff --git a/spring-katharsis/.classpath b/spring-katharsis/.classpath new file mode 100644 index 0000000000..9ae7bca0fc --- /dev/null +++ b/spring-katharsis/.classpath @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-katharsis/.project b/spring-katharsis/.project new file mode 100644 index 0000000000..03ad78567d --- /dev/null +++ b/spring-katharsis/.project @@ -0,0 +1,29 @@ + + + spring-katharsis + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/spring-katharsis/.springBeans b/spring-katharsis/.springBeans new file mode 100644 index 0000000000..b854542b58 --- /dev/null +++ b/spring-katharsis/.springBeans @@ -0,0 +1,13 @@ + + + 1 + + + + + + + + + + diff --git a/spring-katharsis/pom.xml b/spring-katharsis/pom.xml new file mode 100644 index 0000000000..554ff4e656 --- /dev/null +++ b/spring-katharsis/pom.xml @@ -0,0 +1,75 @@ + + 4.0.0 + org.springframework.samples + spring-katharsis + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.2.6.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.h2database + h2 + + + + + + io.katharsis + katharsis-servlet + 1.0.0 + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.jayway.restassured + rest-assured + 2.4.0 + test + + + commons-logging + commons-logging + + + + + + + + + 1.8 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-katharsis/src/main/java/org/baeldung/Application.java b/spring-katharsis/src/main/java/org/baeldung/Application.java new file mode 100644 index 0000000000..1b409f8b91 --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/Application.java @@ -0,0 +1,14 @@ +package org.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + + } + +} \ No newline at end of file diff --git a/spring-katharsis/src/main/java/org/baeldung/Setup.java b/spring-katharsis/src/main/java/org/baeldung/Setup.java new file mode 100644 index 0000000000..c371c16d5b --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/Setup.java @@ -0,0 +1,25 @@ +package org.baeldung; + +import javax.annotation.PostConstruct; + +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class Setup { + + @Autowired + private UserRepository userRepository; + + @PostConstruct + private void setupData() { + final User user = new User(); + user.setFirstName("john"); + user.setLastName("doe"); + user.setEmail("john@test.com"); + userRepository.save(user); + } + +} \ No newline at end of file diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-katharsis/src/main/java/org/baeldung/persistence/dao/UserRepository.java new file mode 100644 index 0000000000..cfe857ec40 --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/dao/UserRepository.java @@ -0,0 +1,8 @@ +package org.baeldung.persistence.dao; + +import org.baeldung.persistence.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { + +} diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/JsonApiFilter.java b/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/JsonApiFilter.java new file mode 100644 index 0000000000..dc07841fe6 --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/JsonApiFilter.java @@ -0,0 +1,40 @@ +package org.baeldung.persistence.katharsis; + +import io.katharsis.invoker.KatharsisInvokerBuilder; +import io.katharsis.locator.JsonServiceLocator; +import io.katharsis.servlet.AbstractKatharsisFilter; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.stereotype.Component; + +@Component +public class JsonApiFilter extends AbstractKatharsisFilter implements BeanFactoryAware { + + private static final String DEFAULT_RESOURCE_SEARCH_PACKAGE = "org.baeldung.persistence"; + + private static final String RESOURCE_DEFAULT_DOMAIN = "http://localhost:8080"; + + private BeanFactory beanFactory; + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = beanFactory; + } + + @Override + protected KatharsisInvokerBuilder createKatharsisInvokerBuilder() { + final KatharsisInvokerBuilder builder = new KatharsisInvokerBuilder(); + + builder.resourceSearchPackage(DEFAULT_RESOURCE_SEARCH_PACKAGE).resourceDefaultDomain(RESOURCE_DEFAULT_DOMAIN).jsonServiceLocator(new JsonServiceLocator() { + @Override + public T getInstance(Class clazz) { + return beanFactory.getBean(clazz); + } + }); + + return builder; + } + +} diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/UserResourceRepository.java b/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/UserResourceRepository.java new file mode 100644 index 0000000000..4c7ce70765 --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/katharsis/UserResourceRepository.java @@ -0,0 +1,42 @@ +package org.baeldung.persistence.katharsis; + +import io.katharsis.queryParams.RequestParams; +import io.katharsis.repository.ResourceRepository; + +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.User; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class UserResourceRepository implements ResourceRepository { + + @Autowired + private UserRepository userRepository; + + @Override + public User findOne(Long id, RequestParams params) { + return userRepository.findOne(id); + } + + @Override + public Iterable findAll(RequestParams params) { + return userRepository.findAll(); + } + + @Override + public Iterable findAll(Iterable ids, RequestParams params) { + return userRepository.findAll(ids); + } + + @Override + public S save(S entity) { + return userRepository.save(entity); + } + + @Override + public void delete(Long id) { + userRepository.delete(id); + } + +} diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java new file mode 100644 index 0000000000..c0a04ac344 --- /dev/null +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java @@ -0,0 +1,91 @@ +package org.baeldung.persistence.model; + +import io.katharsis.resource.annotations.JsonApiId; +import io.katharsis.resource.annotations.JsonApiResource; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Entity +@JsonApiResource(type = "users") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @JsonApiId + private Long id; + + private String firstName; + + private String lastName; + + private String email; + + public User() { + super(); + } + + public Long getId() { + return id; + } + + public void setId(final Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(final String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(final String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(final String username) { + email = username; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (email == null ? 0 : email.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final User user = (User) obj; + if (!email.equals(user.email)) + return false; + return true; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]"); + return builder.toString(); + } + +} \ No newline at end of file diff --git a/spring-katharsis/src/main/resources/application.properties b/spring-katharsis/src/main/resources/application.properties new file mode 100644 index 0000000000..25d4559e3d --- /dev/null +++ b/spring-katharsis/src/main/resources/application.properties @@ -0,0 +1,6 @@ +spring.datasource.url = jdbc:h2:mem:springKatharsis;DB_CLOSE_DELAY=-1 +spring.datasource.username = sa +spring.datasource.password = +spring.jpa.show-sql = false +spring.jpa.hibernate.ddl-auto = create-drop +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java b/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java new file mode 100644 index 0000000000..bbddba3490 --- /dev/null +++ b/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java @@ -0,0 +1,29 @@ +package org.baeldung.test; + +import static org.junit.Assert.assertEquals; + +import org.baeldung.Application; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.response.Response; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@WebAppConfiguration +public class JsonApiLiveTest { + + private final static String URL_PREFIX = "http://localhost:8080/users"; + + @Test + public void whenGettingAllUsers_thenCorrect() { + final Response response = RestAssured.get(URL_PREFIX); + assertEquals(200, response.statusCode()); + System.out.println(response.asString()); + } + +}