springboot - blog project (26,27)

Yuri Lee·2020년 8월 25일
0

springboot - blog project

목록 보기
15/49

스프링부트 강좌 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 테스트

-이 글은 유투버 겟인데어의 스프링 부트 강좌를 바탕으로 정리한 내용입니다.-

profile
Step by step goes a long way ✨

0개의 댓글