스프링부트 강좌 26강(블로그 프로젝트) - id로 select 테스트
@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id) {
User user = userRepository.findById(id);
return user;
}
얘가 리턴하는 타입이 user가 아니다. Optional 이다.
Supplier는 인터페이스이고 get 함수를 들고 있는데 얘는 추상 메서드이기 때문에..
인터페이스는 new할 수 없다. 인터페이스를 new 하려면 익명 클래스를 만들어야 한다.
그래서 new 하면서 이 함수를 오버라이딩 하게 해주면 객체 생성이 가능하다.
// return의 user객체를 return 받을 것!
// {}주소로 파라미터를 전달 받을 수 있음.
// http://localhost:8000/blog/dummy/user/3
@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id) {
// user/4을 찾을 때 내가 데이터베이스에서 못 찾아오게 되면 user가 null이 될 것 아냐?
// 그럼 return null 이 리턴이 되잖어..이 프로그램에 문제가 있지 않겠니?..
// optional 로 너의 User 객체를 감싸서 가져올테니 null 인지 아닌지 판단해서 return 해!
User user = userRepository.findById(id).orElseGet(new Supplier<User>() {
@Override
public User get() {
// TODO Auto-generated method stub
return null;
}
};
return user;
}
그럼 여기다가 리턴할 때 return new User() 빈 객체를 리턴해주면 ..!!
현재 db 상태
스프링에서 IllegalArgumentException 이 발생하게 되면 스프링에서 AOP라는 개념이 있다.얘를 가로채서 에러페이지를 보여주는 게 나을 것이다. 그 방법은 나중에 알려주겠다..
.get() 으로 하면 2,3은 아이디가 있어서 오류가 나지 않지만 4를 요청하면 서버오류가 난다....근데 어떤 메시지 인지는 알 수 없음...
람다식이 있다. orElseThrow 자리에 나올 수 있는 타입은 Supplier 타입이다. 타입이 Supplier 이니까 new Supplier type을 정확하게 적어주고 <> 어떤 것을 리턴해줘야 하는지, 익셉션에 대한 클래스를 적어주고.. 등등 하면 이거 하나하나 찾는게 매우 귀찮다. 그래서 람다식을 사용하기도 한다.
User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
@Override
public IllegalArgumentException get() {
// TODO Auto-generated method stub
return new IllegalArgumentException("해당 유저는 없습니다. id:" +id);
}
});
데이터를 리턴해주는 RestController가 user 객체를 리턴해준다. 누구한테? 웹 브라우저에게..그럼 웹 브라우저는 당연히 user 객체를 이해하지 못할 것이다. 왜냐면 웹 브라우저는 html,, 정적파일만 이해할 수 있기 때문이다.
따라서 변환을 해야한다. 웹 브라우저가 이해할 수 있는 데이터로! json!!!
스프링 부트는 = MessageConverter라는 얘가 응답시에 자동 작동한다. 만약에 자바 오브젝트를 리턴하게 되면 MessageConverter가 Jackson이라는 라이버리를 호출해서 user 오브젝트를 json으로 변환해서 브라우저에게 던져준다.
그래서 주소창에 요청하게 되면 자바 오브젝트가 웹 브라우저가 json 타입의 데이터로 보일 것이다.
response headers, content-type에 application/json이라고 적혀있다. 응답을 하는 주체는 스프링 서버이다. 요청은 웹브라우저에서 함...응답해주는 데이터 타입은 json이라고 http header 알려줌 ~~~
스프링부트 강좌 27강(블로그 프로젝트) - 전체 select 및 paging 테스트
-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-