User Service
User Bean
Create a new bean class
package me.chairat.spring.boot.workshop.user;
import java.util.Date;
public class User {
private Integer id;
private String name;
private Date birthDate;
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 getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public User(Integer id, String name, Date birthDate) {
this.id = id;
this.name = name;
this.birthDate = birthDate;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", birthDate=" + birthDate +
'}';
}
}
User DAO
Create a new DAO class
package me.chairat.spring.boot.workshop.user;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class UserDaoService {
private static List<User> users = new ArrayList<>();
private static int userCount = 3;
static {
users.add(new User(1, "Adam", new Date()));
users.add(new User(2, "Eve", new Date()));
users.add(new User(3, "Jack", 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;
}
}
User Resource
Create a new resource class
package me.chairat.spring.boot.workshop.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserResource {
@Autowired
private UserDaoService service;
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
}
If the date is displayed as timestamp, try appendingĀ spring.jackson.serialization.write-dates-as-timestamps=false
to the application.properties
Add a new method
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
return service.findOne(id);
}
Create User
Add a new method
@PostMapping("/users")
public void createUser(@RequestBody User user) {
User savedUser = service.save(user);
}
You also need to add the default constructor to the class User. Otherwise, you will get 500 Internal Server Error.
Test create a new user
Get all users
Response Entity
Enhance the createUser method
@PostMapping("/users")
public ResponseEntity<Object> createUser(@RequestBody User user) {
User savedUser = service.save(user);
URI location = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
Delete User
Add a new method deleteById
in UserDaoService
public User deleteById(int id) {
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (user.getId() == id) {
iterator.remove();
return user;
}
}
return null;
}
And add a new REST method
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id) {
User user = service.deleteById(id);
if (user==null) {
throw new UserNotFoundException("id-" + id);
}
}
Exception handling is explained on the next page