전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (174)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Springboot/블로그만들기

[Springboot] 블로그 만들기 (10)_Select 테스트_단일행

2023. 11. 24. 18:53

Controller

@RestController
public class DummyControllerTest {
	
	@Autowired // 의존성 주입(DI)
	private UserRepository userRepository;
	
	// {id} 주소로 파라미터를 전달 받을 수 있음.
	//http://localhost:8001/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).get(); // null 이 리턴될리가 없을때 사용. 이건 좀 위험하다
		User user = userRepository.findById(id).orElseGet(new Supplier<User>() {
			@Override
			public User get() { // 만약 없는 Id값이 들어왔을때 이 메소드를 탄다.
				// TODO Auto-generated method stub
				return new User(); // 비어있는 객체를 넣어준다 이건 null이 아님
			}
		});  // null이면 너가 객체를 만들어서 넣어줘
 
		return user;
	}
}

 

이 방법 말고도 더 좋은 방법이 있다.

@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id) {
	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;
}

 

크롬에서 테스트해보자

 

http://localhost:8001/blog/dummy/user/3

 

별개로 람다식으로 작성하면 코드 길이를 매우 줄일 수 있다. 우린 안쓸꺼임..

@GetMapping("/dummy/user/{id}")
public User detail(@PathVariable int id) {
//	람다식
    User user = userRepository.findById(id).orElseThrow(()->{
        return new IllegalArgumentException("해당 사용자는 없습니다. id : " + id);
    })
    return user;
}

근데 data를 리턴해주는 @RestController를 사용했고 반환값으로 return user; 을 했는데 어떻게 결과 값이 JSON 형식으로 나왔을까 ?

 

요청 : 웹 브러우저
user 객체 = 자바 오브젝트
변환 해야된다. (웹 브라우저가 이해할 수 있는 데이터) -> json (Gson 라이브러리)


하지만 스프링부트에서는 MessageConverter라는 애가 응답시에 자동으로 동작하게 된다.
만약에 자바 오브젝트를 리턴하게 되면 MessageConverter가 Jackson 라이브러리를 호출해서 User 오브젝트를 json으로 변환해서 브라우저에게 던져준다. 즉 자동으로 변환 시켜준다. 매우 편리함

 

크롬 개발자도구에서 확인결과 content-Type이 json 형식인것을 알 수 있다.


참고 유튜브 (메타코딩님 강의)

https://youtu.be/rpcoHCXgGnQ?si=mmR6rLM93F0oZeH5

    'Springboot/블로그만들기' 카테고리의 다른 글
    • [Springboot] 블로그 만들기 (12)_Update 테스트
    • [Springboot] 블로그 만들기 (11)_Select 테스트_다중행
    • [Springboot] 블로그 만들기 (9)_회원가입 insert 테스트
    • [Springboot] 블로그 만들기 (8)_Reply Table 생성
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바