Skip to content

Controller use Repository

Somkiat Puisungnoen edited this page Dec 28, 2020 · 3 revisions

How to test REST Controller with Repository ?

1. Controller use Repository !!

UserController.java

@RestController
public class UserController {

    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

Get all users

@GetMapping("/users")
public List<UserResponse> getAllUsers() {
    List<UserResponse> userResponseList = new ArrayList<>();
    List<User> users = userRepository.findAll();
    for (User user : users) {
        userResponseList.add(new UserResponse(user.getId(),
                user.getName(), user.getAge()));
    }
    return userResponseList;
}

Get user by id

@GetMapping("/users/{id}")
public UserResponse getUserById(@PathVariable int id) {
    User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException(id));
    UserResponse userResponse = new UserResponse(user.getId(),
            user.getName(), user.getAge());
    return userResponse;
}

2. Error handler with REST API

  • Using controller advice

UserNotFoundAdvice.java

@ControllerAdvice
public class UserNotFoundAdvice {
    @ResponseBody
    @ExceptionHandler(UserNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    String userNotFoundHandler(UserNotFoundException e) {
        return e.getMessage();
    }
}

UserNotFoundException.java

public class UserNotFoundException extends RuntimeException {
    public UserNotFoundException(int id) {
        super("Could not find user " + id);
    }
}