[@ModelAttribute 사용 시 nullException 해결] 1. 문제 발생 클라이언트에서 form-data형식으로 이미지(파일)과 값을 한 번에 보내는 요청이 있었다. Controller를 아래처럼 작성하고 조회를 해보니 자꾸 요소 값이 null로 들어왔다. - controller @PostMapping(value = "", consumes = {"multipart/form-data"}) public DataResponse askGPTSync(Principal principal, @ModelAttribute TalkReqDto talkReqDto) throws Exception { return openAIService.askGPTSync(principal, talkReqDto); } - Ta..
[스프링 데이터 JPA 쿼리 메서드] 목표 순수 JPA리포지토리와 쿼리 메서드 비교하기(이름과 나이를 기준으로 회원 조회하는 쿼리 비교하기) 순수 JPA 리포지토리 1. 순수 JPA 리포지토리 작성하기 public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } 이 코드는 리포지토리를 생성한 후 쿼리문을 문자열 형태로 만든다. ..
[Entity에 setter대신 생성자 활용하기] 목표 setter대신 생성자 활용해보기 setter을 사용하지 말아야 하는 이유 1. 사용자의 의도를 파악하기 어렵다. Member member = new Member(); member.setUsername("name1"); member.setAge(25); member.setTeam(teamA); 위의 코드를 보면 새로운 member객체를 생성하는 것인지, 값을 변경하는 것인지 의도를 파악하기 어렵다. 이 코드는 새로운 member객체를 생성하는 것지만, 객체의 요소가 많아질수록 더욱 복잡해질 것이다. Member member = new Member("name1", 25, teamA); 위의 코드 또한 member객체를 생성하는 것으로, 생성자를 이용해..