User.java
package GradleDemo; import java.util.Date; public class User { private Integer id; private String name; private Date bithDate; public User() { } public User(Integer id, String name, Date bithDate) { super(); this.id = id; this.name = name; this.bithDate = bithDate; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBithDate() { return bithDate; } public void setBithDate(Date bithDate) { this.bithDate = bithDate; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", bithDate=" + bithDate + "]"; } }
UserDaoService.java
package GradleDemo; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.stereotype.Component; @Component public class UserDaoService { public static int userCount = 3; private static List<User> users = new ArrayList<>(); static { users.add(new User(1,"Tyson",new Date())); users.add(new User(2,"Justin",new Date())); users.add(new User(3,"Martin",new Date())); } public List<User> findAll(){ return users; } public User save(User user) { if(user.getId()==null) { user.setId(++userCount); } users.add(user); return user; } public User findOne(int id) { for(User user : users) { if(user.getId()==id) { return user; } } return null; } }
UserResource.java
package GradleDemo; import java.net.URI; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; @RestController public class UserResource { @Autowired private UserDaoService userDaoService; @GetMapping("/users") public List<User> retrieveAllUsers(){ return userDaoService.findAll(); } @GetMapping("/user/{id}") public User getUser(@PathVariable int id) { return userDaoService.findOne(id); } @PostMapping("/users") public ResponseEntity<Object> createUser(@RequestBody User user) { User savedUser = userDaoService.save(user); URI location = ServletUriComponentsBuilder .fromCurrentContextPath() .path("{id}") .buildAndExpand(savedUser.getId()).toUri(); return ResponseEntity.created(location).build(); // 201 response is returned } }
App.java
package GradleDemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
build.gradle
plugins { id 'java' id 'org.springframework.boot' version '2.2.1.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' } repositories { mavenCentral() } dependencies { implementation 'com.google.guava:guava:28.0-jre' testImplementation 'junit:junit:4.12' implementation 'org.springframework.boot:spring-boot-dependencies:2.2.1.RELEASE' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.data:spring-data-rest-hal-browser' implementation 'org.springframework.boot:spring-boot-devtools:1.3.0.RELEASE' implementation 'org.springframework.data:spring-data-jpa:2.2.2.RELEASE' implementation 'javax.persistence:javax.persistence-api:2.2' implementation 'com.h2database:h2:1.4.200' testImplementation 'org.springframework.boot:spring-boot-starter-test' components { withModule('org.springframework:spring-beans') { allVariants { withDependencyConstraints { it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } } } } } } } bootJar { mainClassName = 'GradleDemo.App' } task runJar{ dependsOn 'assemble' dependsOn 'jar' doLast{ javaexec { main="-jar"; args = [ "build/libs/"+rootProject.name+".jar" ] } } }