본문 바로가기

코딩공부

트러블슈팅 - Post Ban 오류

Ban 기능 구현 중, Post 진행 시 계속해서 타입 오류가 발생했다.

java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.String (n/a)]

이런 오류인데, post 과정에서 service 클래스에서 ban에서의 유효성 검증을 위해서 이미 등록되어있는 ban인지 확인하는 과정에서

ban repository를 통해 검증하는데 long 타입이 들어가야 하는데 계속 올바른 타입이 아니라고 뜨는 오류가 발생했다.

 

기존 repository에서 사용한 코드는 아래와 같다.

public interface BanRepository extends JpaRepository<Ban, Long> {

    Optional<Ban> findByMember_IdAndBanMember_Id(long memberId, long banMemberId);
}

 

우선 들어가는 데이터가 long 타입인지 코드들을 전부 확인했는데 이상이 없었고,

다음으로 출력을 통해서 전후로 들어가는 데이터들을 출력해서 확인했는데도 정상적인 숫자로 확인이 되었다.

GPT한테 물어보자 아마 long타입이 들어가야하는데 String 타입이 들어가는것 같다고 하였고, member의 entity에서 다른 column과 혼동되는 것인지 계속해서 오류가 발생했다.

 

결국 마지막에는 member 객체로 확인하여 오류를 해결했다.

 

해결한 코드는 아래와 같다.

public interface BanRepository extends JpaRepository<Ban, Long> {

    Optional<Ban> findByMemberAndBanMember(Member member, Member banMember);
}
    @Transactional(readOnly = true)
    public void verifyExistsBan(long memberId, long banMemberId){

        Optional<Member> optionalMember = memberRepository.findById(memberId);
        Member member = optionalMember.orElseThrow(()-> new BusinessLogicException(ExceptionCode.MEMBER_NOT_FOUND));
        Optional<Member> optionalBanMember = memberRepository.findById(banMemberId);
        Member banMember = optionalBanMember.orElseThrow(()-> new BusinessLogicException(ExceptionCode.MEMBER_NOT_FOUND));
        Optional<Ban> ban = banRepository.findByMemberAndBanMember(member, banMember);

        if (ban.isPresent()) throw new BusinessLogicException(ExceptionCode.BAN_EXISTS);
    }

 

이 부분을 통해 유효성 검증을 거치도록 수정하자 오류없이 정상적인 등록이 되었다.

 

GPT에게 아무리 물어봐도 계속 타입을 확인하라는 말만 반복했고 결국 이것저것 다 해보다가 찾은 방법이었다.

 

또한 이 문제가 그대로 delete, get 에서도 똑같이 발생했다. 무언가 ban 에서의 코드 문제인지는 모르겠지만 똑같은 방법으로 객체를 활용하여 전부 해결완료했다.