JPA

오류 modelMapper has a non-private no-argument constructor.

dev.mk 2022. 9. 3. 21:46
반응형

- 오류나 발생한 곳

    public TbUserDto insertUser(TbUserDto dto) {
        ModelMapper modelMapper = new ModelMapper();
            return modelMapper.map(loginRepository.save(dto.toEntity()), TbUserDto.class);
    }

ModelMapper라는 것을 사용하여  데이터 저장 후 저장된 값을 Return 하려고 Dto <> Entity 변환 과정을하다 아래의 오류가 발생

TbUserDto has a non-private no-argument constructor.

※ TbUserDto는 내가 사용하는 Dto명임.

 

구글링 해보니 이 에러는 Dto에 기본 생성자가 없어 발생한 문제. 따라서, Dto에 기본 생성자를 만들어 문제를 해결하였음

 

기본생성자를 만들고 @Builder 어노테이션을 사용했던것이 문제의 발단.

최상단에 @Builder 를넣고

@AllArgsConstructor(파라미터가 없는 기본 생성자를 생성)

@NoArgsConstructor(모든 필드 값을 파라미터로 받는 생성자 생성)

그리고 위의 어노테이션 추가.

 

에러가 발생했던 Dto

Before

package kr.co.login.dto;

import java.time.LocalDateTime;

import kr.co.login.domain.TbUser;
import lombok.Builder;
import lombok.Data;

@Data
public class TbUserDto {

	private Long userNo;
	private String userId;
	private String userPw;
	private String userNm;
	private String userMail;
	private LocalDateTime userRegDt;
	private LocalDateTime userModDt;
	
   @Builder
    public TbUserDto(Long userNo, String userId, String userPw, String userNm, String userMail, LocalDateTime userRegDt, LocalDateTime userModDt) {
	   this.userNo = userNo;
	   this.userId = userId;
	   this.userPw = userPw;
	   this.userNm = userNm;
	   this.userMail = userMail;
	   this.userRegDt = userRegDt;
	   this.userModDt = userModDt;
    }

    public TbUser toEntity(){
        return TbUser.builder()
        		.userNo(userNo)
        		.userId(userId)
                .userPw(userPw)
                .userNm(userNm)
                .userMail(userMail)
                .userRegDt(userRegDt)
                .userModDt(userModDt)
                .build();
    }

}

After

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TbUserDto {

	private Long userNo;
	private String userId;
	private String userPw;
	private String userNm;
	private String userMail;
	private LocalDateTime userRegDt;
	private LocalDateTime userModDt;

    public TbUser toEntity(){
        return TbUser.builder()
                .userNo(userNo)
                .userId(userId)
                .userPw(userPw)
                .userNm(userNm)
                .userMail(userMail)
                .userRegDt(userRegDt)
                .userModDt(userModDt)
                .build();
    }

}

 

 

 

반응형