게시글
질문&답변
2024.03.18
에러메시지에 포함된 금액을 표시할 때 천단위로 쉼표를 넣는 건 어떤 코드가 수행하는 것일까요?
혹시 저와 비슷한 의문을 품으셨을 분들을 위해 미래에서 왔습니다. MVC 2편에서 뒤쪽에 나오는 스프링 타입 컨버터에서 위 질문과 관련된 내용을 배우게 됩니다^^참고하시길 바라요
- 0
- 2
- 114
질문&답변
2024.03.18
spring 3.2.0 사용하시는 분들 중 converterEdit에서 컨버팅 안되시는 분
파라미터를 받지 않는 기본 생성자가 만들어지느냐 아니냐의 여부가 차이를 만들어내는 지점인 것 같습니다. @Data 애너테이션을 사용할 경우, Form 클래스에는 파라미터를 받지 않는 기본 생성자가 만들어지지 않습니다.아래는 @Data를 사용한 경우에 빌드된 결과물을 인텔리제이에서 디컴파일한 코드입니다. static class Form { private IpPort ipPort; public Form(IpPort ipPort) { this.ipPort = ipPort; } public IpPort getIpPort() { return this.ipPort; } public void setIpPort(IpPort ipPort) { this.ipPort = ipPort; } public boolean equals(Object o) { if (o == this) { return true; } else if (!(o instanceof Form)) { return false; } else { Form other = (Form)o; if (!other.canEqual(this)) { return false; } else { Object this$ipPort = this.getIpPort(); Object other$ipPort = other.getIpPort(); if (this$ipPort == null) { if (other$ipPort != null) { return false; } } else if (!this$ipPort.equals(other$ipPort)) { return false; } return true; } } } protected boolean canEqual(Object other) { return other instanceof Form; } public int hashCode() { int PRIME = true; int result = 1; Object $ipPort = this.getIpPort(); result = result * 59 + ($ipPort == null ? 43 : $ipPort.hashCode()); return result; } public String toString() { return "ConverterController.Form(ipPort=" + this.getIpPort() + ")"; } }보시는 것처럼 기본 생성자가 없기 때문에 @ModelAttribute가 부여된 파라미터에 객체를 매핑하는 과정에서, 스프링이 비어있는 Form 객체를 생성하고 Setter를 호출하여 값을 셋팅해야 하는데 빈 객체 생성이 불가능하여 에러가 발생하는 것이 아닌가 싶습니다! 따라서 @RequiredArgsConstructor 대신에 @NoArgsConstructor를 사용해도 잘 동작합니다
- 9
- 4
- 959
질문&답변
2024.03.16
이해가 잘 되지 않습니다
구체적으로 쿠키 셋팅과 DB 회원 저장을 어떻게 구현했느냐에 따라 달라지긴 하겠습니다만, 몇가지 시나리오를 생각해 볼 수는 있을 것 같아요. 1) 사용자가 로그인 후 회원 탈퇴를 함2) 서버 사이드에서는 회원 탈퇴 시 DB에서 해당 레코드를 삭제 또는 수정해서 조회되지 않도록 하고, 기존 쿠키를 만료시켜주는 로직은 따로 구현하지 않음 이런 상황이라면 쿠키는 남아있겠으나, 해당 ID로 회원을 조회할 경우 DB로부터 null이 반환되는 것이 가능하지 않을까 생각을 해봅니다.여담이지만, 질문을 읽을 사람이 보다 명확하게 알아볼 수 있도록 코드를 코드블록 안에 넣어주시면 더 좋을 것 같습니다 😀아래는 예시입니다. @GetMapping("/") public String homeLogin(@CookieValue(name = "memberId", required = false) Long memberId, Model model) { if (memberId == null) { return "home"; } //로그인 Member loginMember = memberRepository.findById(memberId); if (loginMember == null) { return "home"; } model.addAttribute("member", loginMember); return "loginHome"; }
- 0
- 1
- 369