Hello

28. id로 select 테스트

by 볼빵빵오춘기

DummyControllerTest

// {id} 주소로 파라미터를 전달받을 수 있음.
@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id){
    // user/100을 찾으면 내가 DB에서 못찾아오게 되면 user가 null이 될 것 아냐?
    // 그럼 return null이 리턴 되잖아.. 그럼 프로그램에 문제가 있지 않겠니..?
    // Optional로 너의 User객체를 감써서 가져올테니 null인지 아닌지 판단해서 return
    // 람다식 x
    User user = userRepository.findById(id).orElseThrow(new Supplier<IllegalArgumentException>() {
        @Override
        public IllegalArgumentException get() {
            return new IllegalArgumentException("해당 유저는 없습니다.");
        }
    });

    // 람다식
//        User user = userRepository.findById(id).orElseThrow(()-> {
//            return new IllegalArgumentException("해당 유저는 없습니다.");
//        });

    // 요청 : 웹 브라우저
    // user 객체 = 자바 오브젝트
    // 변환(웹 브라우저가 이해할 수 있는 데이터)-> json(Gson라이브러리)
    // 스프링부트 = MessageConverter라는 애가 응답시에 자동 작동
    // 만약에 자바 오브젝트를 리턴하게 되면 MessgaeConverter가 Jckson 라이브러리를 호출해서
    // user 오브젝트를 json으로 변환해서 브라우저에게 던져준다.

    return user;
}

 

실행 결과

DB에 해당 id의 유저가 있는 경우

DB에 해당 id의 유저가 없는 경우

 

알 수 있는 점

요청은 웹 브라우저에서 했고 DummyController는 @RestController 어노테이션이 붙어 있으므로 html파일이 아니라 data를 리턴해준다. 하지만 DummyController에서 return을 오브젝트로 했다. 

그러면 웹 브라우저에서는 java객체를 이해할 수 없기 때문에 결과가 출력되지않아야한다. 

하지만 실행 결과를 보면 data가 출력되는 것을 확인가능하다. 

 

🤔 why?

스프링부트에서 MessageConverter라는 애가 응답시에 자동 작동하여 자바 오브젝트를 리턴하게 되면 MessgaeConverter가 Jckson 라이브러리를 호출해서 user 오브젝트를 json으로 변환해서 브라우저에게 던져준다.

스프링부트의 MessageConverter가 자바객체를 변환(웹 브라우저가 이해할 수 있는 데이터)-> json(Gson라이브러리)으로 리턴해서 보여준것이다.

개발자 도구를 통해 해당 데이터 타입을 확인 가능하다.

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기