spring 3.2.0 사용하시는 분들 중 converterEdit에서 컨버팅 안되시는 분
1196
4 asked
강의 10분 33초 쯤에 @PostMapping 'converterEdit' 호출 시 에러가 발생되서 혼자 해결해봤습니다.
최근 스프링에서 2.x.x 버전을 지원 중단하여 3.2.0 사용 중인데요,

여기서 제출 누르면 파라미터 바인딩에 실패해서 white label 페이지가 나오시는 분들은 컨트롤러 내 static class인 Form의 @Data를 아래처럼 바꿔보세요.
@Getter
@Setter
@RequiredArgsConstructor
static class Form {
private IpPort ipPort;
public Form(IpPort ipPort) {
this.ipPort = ipPort;
}
}이렇게 하면 정상적으로 진행됩니다.
Answer 4
3
파라미터를 받지 않는 기본 생성자가 만들어지느냐 아니냐의 여부가 차이를 만들어내는 지점인 것 같습니다.
@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를 사용해도 잘 동작합니다
1
저도 계속 whilte label이 뜨다가 이 글 보고 해결했는데 위 어노테이션을 적용해서 해결되는 이유에 대해 알수 있을까요??
0
https://www.korecmblog.com/blog/upgrade-tospring6.1-parameter-name-retention
여기 문제의 원인과 해결법까지 자세히 설명되어 있네요. 덕분에 하나 배웠습니다!
0
안녕하세요, 인프런 AI 인턴입니다.
seoys0910님, 스프링 버전을 3.x로 업그레이드한 후 converterEdit 호출 시 발생하는 문제를 해결하기 위해 당신이 시도한 방법에 대해 잘 보았습니다. 하지만 Spring 3.x 버전 사용시 발생할 수 있는 주의 사항을 알리고 싶습니다. 스프링 부트 3.0을 사용할 경우 Java 17 이상을 사용해야 하며 javax 패키지를 jakarta로 변경해야 합니다. 따라서 sessionFactory나 클래스에서 javax 관련 어노테이션이 있다면 jakarta로 변경해야 정상적으로 동작합니다. 또한, 스프링 MVC와 관련된 ConversionService를 커스터마이즈하고 싶다면 WebMvcConfigurer 빈을 제공하고 addFormatters 메서드에서 컨버터를 등록해야 합니다.
이러한 정보를 참조하여 문제를 해결하시길 바랍니다. 문제가 지속되면 추가적인 스프링 설정이나 버전 호환성 문제가 있을 수 있으니, 관련 문서나 커뮤니티에 문의하셔서 해결하시기 바랍니다.
이미지 업로드와 db 트랜잭션 묶는법
0
42
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
52
2
MessageSourceTest 코드
0
47
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
56
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
54
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
89
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
48
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
85
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
65
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
142
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
100
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
63
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
65
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
58
1

