Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for class com.portfolio.www.auth.dto.MemberDto

pickylemon·2024년 5월 21일

Exception 모음

목록 보기
19/31

[Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for class com.portfolio.www.auth.dto.MemberDto]을(를) 발생시켰습니다.
java.lang.IllegalStateException: No primary or single unique constructor found for class com.portfolio.www.auth.dto.MemberDto
...
java.lang.IllegalStateException: No primary or single unique constructor found for class com.portfolio.www.auth.dto.MemberDto
at org.springframework.beans.BeanUtils.getResolvableConstructor(BeanUtils.java:270)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:219)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:85)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:147)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument

상황, 원인 및 해결

@PostMapping("/auth/joinPage.do")
	public ModelAndView join(@ModelAttribute MemberDto memberDto, Model model) {
    ...
    
    }
  • MemberDto에 기본생성자가 없어서 발생한 에러
  • 컨트롤러 메서드에 @ModelAttribute MemberDto를 적으면,
    기본 생성자로 MemberDto 객체를 생성후 파라미터를 바인딩 해주는데 기본 생성자가 없어서 발생한 에러였다.
  • MemberDto에 단 하나의 생성자도 만들지 않으면 컴파일러가 기본 생성자를 만들어주는데, 기본 생성자가 아닌 다른 생성자가 하나라도 있으면 컴파일러가 기본생성자를 만들어 주지 않는다.
  • 매개변수가 있는 생성자를 만들면서 기본생성자를 명시적으로 추가하지 않았기때문에 에러가 발생한 것!
  • 기본 생성자를 명시해줌으로써 에러 해결

더 알아보기

ArgumentResolver와 Reflection API, 객체 파라미터 바인딩에 대해서 더 공부해보기

profile
안녕하세요

0개의 댓글