dev/spring data JPA
Web확장 도메인 클래스 컨버터 (@Pathvariable 객체로 받기)
dev_0hoon
2024. 3. 6. 17:51
package study.datajpa.controller;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import study.datajpa.entity.Member;
import study.datajpa.repository.MemberRepository;
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberRepository memberRepository;
@GetMapping("/members/{id}")
public String findMember(@PathVariable("id") Long id){
Member member = memberRepository.findById(id).get();
return member.getUsername();
}
@GetMapping("/members2/{id}")
public String findMember2(@PathVariable("id") Member member){
return member.getUsername();
}
@PostConstruct
public void init(){
Member member = new Member("member1");
memberRepository.save(member);
}
}
data JPA에서는 findMember2처럼 id일 경우 아예 객체로 받을 수 있다. 그 과정에서 엔티티 조회를 호출해서 값도 채워넣는다. 하지만 이는 Tranjection 밖에서 일어난 일이기 때문에 수정이 불가하다.
또 눈으로 봐도 이해하기 힘든 기능이기에 실무에서 그닥 사용되지 않는다. 조금 위험한 방식이라는 생각이 든다. id가 아니면 사용할 수 없기도하고 명확해 보이지가 않는다. 또 예외상황에서 어떻게 처리할지도 고민해봐야한다.. 딱 조회용으로만 사용해야한다.