diff --git a/build.gradle b/build.gradle index 3212546..829bee4 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ } group = 'com.example.springtest' -version = '0.0.1-SNAPSHOT' +//version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { @@ -17,11 +17,13 @@ implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-jersey' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-actuator' runtimeOnly 'com.h2database:h2' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' } + compile("com.fasterxml.jackson.core:jackson-databind") } test { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9492014..e0b3fb8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/example/springtest/demo/DemoApplication.java b/src/main/java/com/example/springtest/demo/DemoApplication.java index e609fe6..0cfe13f 100644 --- a/src/main/java/com/example/springtest/demo/DemoApplication.java +++ b/src/main/java/com/example/springtest/demo/DemoApplication.java @@ -2,12 +2,28 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication -public class DemoApplication { +public class DemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } + /** + * Servletコンテナ起動時の設定クラス認識。 + * + *
+     * Servletコンテナで起動したときにどのクラスが設定クラスなのか認識させます。
+     * 
+ * + * @param SpringApplicationBuilder + * @return SpringApplicationBuilder + */ + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(DemoApplication.class); + } } diff --git a/src/main/java/com/example/springtest/demo/JerseyConfig.java b/src/main/java/com/example/springtest/demo/JerseyConfig.java index 97dc504..c4a4578 100644 --- a/src/main/java/com/example/springtest/demo/JerseyConfig.java +++ b/src/main/java/com/example/springtest/demo/JerseyConfig.java @@ -6,7 +6,7 @@ import javax.ws.rs.ApplicationPath; @Component -@ApplicationPath("/demo") +//@ApplicationPath("/demo") public class JerseyConfig extends ResourceConfig { public JerseyConfig() { diff --git a/src/main/java/com/example/springtest/demo/entities/User.java b/src/main/java/com/example/springtest/demo/entities/User.java new file mode 100644 index 0000000..684a3b3 --- /dev/null +++ b/src/main/java/com/example/springtest/demo/entities/User.java @@ -0,0 +1,58 @@ +package com.example.springtest.demo.entities; + +import javax.persistence.*; + +@Entity // This tells Hibernate to make a table out of this class +@Table(name="USERS") +public class User { + @Id +// @GeneratedValue(strategy= GenerationType.AUTO) + public String uId; + public String name; + public String password; + public String uri; + + public User() { + } + + public User(String uId, String name, String password) { + this.uId = uId; + this.name = name; + this.password = password; + } + +// public User(String uId, String name, String password, String uri) { +// this.uId = uId; +// this.name = name; +// this.password = password; +// this.uri = uri; +// } + + public String getuId() { + return uId; + } + + public String getName() { + return name; + } + + public String getPassword() { + return password; + } + + public void setuId(String uId) { + this.uId = uId; + } + + public void setName(String name) { + this.name = name; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setUri(String uri) { + this.uri = uri; + } +} diff --git a/src/main/java/com/example/springtest/demo/repositories/UserRepository.java b/src/main/java/com/example/springtest/demo/repositories/UserRepository.java new file mode 100644 index 0000000..d70bb2e --- /dev/null +++ b/src/main/java/com/example/springtest/demo/repositories/UserRepository.java @@ -0,0 +1,7 @@ +package com.example.springtest.demo.repositories; + +import com.example.springtest.demo.entities.User; +import org.springframework.data.repository.CrudRepository; + +public interface UserRepository extends CrudRepository { +} diff --git a/src/main/java/com/example/springtest/demo/resources/UserRest.java b/src/main/java/com/example/springtest/demo/resources/UserRest.java new file mode 100644 index 0000000..e5ea139 --- /dev/null +++ b/src/main/java/com/example/springtest/demo/resources/UserRest.java @@ -0,0 +1,90 @@ +package com.example.springtest.demo.resources; + +import com.example.springtest.demo.entities.User; +import com.example.springtest.demo.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.*; + +@Component +@Path("/users") +public class UserRest { + + private Map users = new HashMap<>(); + + @Autowired // This means to get the bean called userRepository + // Which is auto-generated by Spring, we will use it to handle the data + private UserRepository userRepository; +// @GET +// public String getUser(@QueryParam("uId") String uId, @QueryParam("name") String name, @QueryParam("password") String password) { +// ObjectMapper objectMapper = new ObjectMapper(); +// String json = null; +// try { +// json = objectMapper.writeValueAsString(new User(uId, name, password)); +// } catch (JsonProcessingException e) { +// e.printStackTrace(); +// } +// return json; +// } + @GET + @Produces(MediaType.APPLICATION_JSON) // 戻り値をJSONで返す. +// public Collection getUsers() { + public Iterable getUsers() { +// return users.values(); // JSONが返る + return userRepository.findAll(); + } + + @Path("/{uId}") + @GET + @Produces(MediaType.APPLICATION_JSON) // 戻り値をJSONで返す. +// public User getUser(@PathParam("uId") String uId) { + public Optional getUser(@PathParam("uId") String uId) { + Optional user = userRepository.findById(uId); +// User user = users.get(uId); + if (user != null) { + return user; // JSONが返る + } else { // uIdが無ければ + throw new WebApplicationException(404); // 404が返る + } + } + + @POST + @Produces(MediaType.APPLICATION_JSON) + public User createUser(@FormParam("name") String name, @FormParam("password") String password) { + String uId = UUID.randomUUID().toString(); + User user = new User(uId, name, password); + users.put(uId, user); + return userRepository.save(user); + } + + @Path("/{uId}") + @PUT + @Produces(MediaType.APPLICATION_JSON) + public User updateUser(@PathParam("uId") String uId, @Nullable @FormParam("name") String name, @Nullable @FormParam("password") String password) { + User user = users.get(uId); + if (user != null) { + user.setName(name); + user.setPassword(password); + return userRepository.save(user); // JSONが返る + } else { // uIdが無ければ + throw new WebApplicationException(404); // 404が返る + } + } + + @Path("/{uId}") + @DELETE + @Produces(MediaType.APPLICATION_JSON) + public User deleteUser(@PathParam("uId") String uId) { + User user = users.remove(uId); + if (user != null) { + userRepository.deleteById(uId); + return user; // JSONが返る + } else { // uIdが無ければ + throw new WebApplicationException(410); // 410が返る(GONE) + } + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..dff7021 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,20 @@ - +#server.context-path=/demo +# �g�p����f�[�^�\�[�X�̃N���X���i�ȗ������ꍇ�Ɠ����ݒ�j +#spring.datasource.type=com.zaxxer.hikari.HikariDataSource +# �f�[�^�x�[�X�h���C�o�̃N���X�� +spring.datasource.driver-class-name=org.h2.Driver +# JDBC�ł̐ڑ�URL +spring.datasource.url=jdbc:h2:mem:jerseydemodb +#;DB_CLOSE_ON_EXIT=FALSE +# �f�[�^�x�[�X�ւ̐ڑ����[�U +spring.datasource.username=jerseydemouser +# �f�[�^�x�[�X�ւ̐ڑ��p�X���[�h +spring.datasource.password=jerseydemo1234 +# ���������s�����̎w�� +spring.datasource.initialization-mode=always +# ���������s���ۂ�DDL�̎��s���[�h +spring.jpa.hibernate.ddl-auto=update +#spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect +#h2 for debug tool +spring.h2.console.enabled=true \ No newline at end of file