Udemy - RESTful Web Services, Java, Spring Boot, Spring MVC and JPA강좌를 수강하며 정리
우리는 이전에 이미 response type으로 사용하기 위해 만들어 놓은 클래스가 있다. UserRest클래스이다. 그리고 현재 /users
로 GET 요청이 들어왔을 때
UserController Class
...
@GetMapping
public String getUser() {
return "get User is called";
}
이렇게 단순한 String 을 반환해주고 있는데, 이걸 유저정보를 반환해주기 위해 UserRest클래스를 반환해준다.
UserController Class
...
@GetMapping
public UserRest getUser() {
return "get User is called";
}
So for us to be able to get details of a specific user, we need to know the ID of that user.
userDetail을 요청할 때의 URL은 다음과 같을것이다.
GET http://localhost:8080/users/xczvWwef58A
GET요청으로 users/뒤에 userID를 붙여준다. 그리고 /users
뒤의 id를 읽어주기 위해 @GetMapping뒤에 이렇게 붙여준다.@GetMapping(path = "/{id}")
그리고 다음과 같이 작성해준다. 아이디를 읽어오고, 그 밸류를 리턴하는 작업이다.
@GetMapping(path = "/{id}")
public UserRest getUser(@PathVariable String id) {
UserRest returnValue = new UserRest();
UserDto userDto = userService.getUserByUserId(id);
BeanUtils.copyProperties(userDto, returnValue);
return returnValue;
}
그리고 위에서 userService.getUserByUserId(id);를 사용했지만 아직 UserService클래스에 실제로 getUserByUserId메서드를 만들지는 않았다. UserService클래스로가서 만들어주자.
package com.appdeveloperblog.app.ws.service;
import org.springframework.security.core.userdetails.UserDetailsService;
import com.appdeveloperblog.app.ws.shared.dto.UserDto;
public interface UserService extends UserDetailsService{
UserDto createUser(UserDto user);
UserDto getUser(String email);
UserDto getUserByUserId(String id);
}
그리고 ServiceImpl에서 getUserByUserId메서드를 구현해주자.
ServiceImpl Class
...
@Override
public UserDto getUserByUserId(String userId) {
UserDto returnValue = new UserDto();
UserEntity userEntity = userRepository.findByUserId(userId);
if (userEntity == null)
throw new UsernameNotFoundException(userId);
BeanUtils.copyProperties(userEntity, returnValue);
return returnValue;
}
이어서, UserRepository클래스에는 아직 findByUserId메서드를 만들어주지 않았다. 만들어주러 가자.
package com.appdeveloperblog.app.ws.io.repositories;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.appdeveloperblog.app.ws.io.entity.UserEntity;
@Repository
public interface UserRepository extends CrudRepository<UserEntity, Long> {
UserEntity findByEmail(String email);
UserEntity findByUserId(String userId);
}
먼저 포스트맨으로 전에 만들었던 로그인을 해서 userId와 Jason Web Token을 받아온다.
그리고,http://localhost:8080/users/userId
이런식으로 get요청을 보내준다. 물론 header에 Authorization으로 방금 받아온 Bearer 토큰을 넣어줘야한다.
잘 받아오는 것을 볼 수 있다!