package com.pure.blog.test;
import java.util.function.Supplier;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import com.pure.blog.model.RoleType;
import com.pure.blog.model.User;
import com.pure.blog.repository.UserRepository;
@RestController
public class DummyControllerTest {
@Autowired
private UserRepository userRepository;
// {id} 주소로 파라미터를 전달 받을 수 있음.
@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id) {
//{id}로 DB에서 select시 없는 id를 찾으면 null이 리턴될 수 있음.
//Optional로 User를 처리하여 null인 경우를 배제할 수 있음.
User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
@Override
public IllegalArgumentException get() {
// TODO Auto-generated method stub
return new IllegalArgumentException("해당 유저는 없습니다. id: " + id);
}
});
return user;
}
@PostMapping("/dummy/join")
public String join(User user) { // key = value 규칙
System.out.println("username: " + user.getUsername());
System.out.println("password: " + user.getPassword());
System.out.println("email: " + user.getEmail());
user.setRole(RoleType.USER);
userRepository.save(user); //DB에 insert 됨.
return "회원가입이 완료되었습니다.";
}
}
GetMapping으로 select를 테스트 해보았다.
.orElseThrow를 사용하여 null이 리턴될 시 에러를 출력할 수 있도록 한 것이 중요하다.
Supplier는 익명클래스로 생성함.
람다식으로 더 줄일 수도 있음.
User user = userRepository.findById(id).orElseThrow(() -> {
return new IllegalArgumentException("해당 유저는 없습니다. id: " + id);
});
return user;
이렇게 처리하면 Supplier타입이 들어가야 되는지 몰라도 써먹을 수 있다. 리얼 익명임. 나는 모름 ㅋㅋ
만약 .orElseGet 해서 User를 리턴해준다면 값이 null인채로 에러없이 표시된다.
또한 이 테스트 클래스는 RestController이기 때문에 자바 오브젝트(User)를 리턴했을 때,
스프링의 MessageConverter가 Jackson 라이브러리를 호출해서 User 오브젝트를 JSON으로 변환해서 응답해줌.
'취업 준비 > Spring boot' 카테고리의 다른 글
17. Delete 테스트 (0) | 2022.01.24 |
---|---|
15. 전체 User select 및 paging 처리 (0) | 2022.01.24 |
13. 회원가입을 위한 insert 테스트 (0) | 2022.01.24 |
12. JSON ? (0) | 2022.01.24 |
11. 연관관계의 주인 (0) | 2022.01.24 |