개인기록

[오류/해결] Property [name] not found on type [dto(혹은 vo)]

ran4 2022. 11. 8. 23:10

오류가 2개 발생하여 정리하였다. 제목의 오류는 오류 2에 해당한다

 

환경

java 8, mybatis, spring boot, maven project

 

 

오류 1 

Result Maps collection does not contain value
MyBatis mapper 설정시 resultMap과 resultType값을 잘못 설정하게 되면 발생하는 문제이다 

<!--   상품 목록 조회 -->
    <select id="showProduct" resultMap="ProductDto">
    select * from coffee_product
    </select>



resultType이 아닌 resultMap으로 설정되어있다 

해결

<!--   상품 목록 조회 -->
    <select id="showProduct" resultType="ProductDto">
    select * from coffee_product
    </select>

 


 

오류2

Property [pName] not found on type [ProductDto]

ProductDto에서 pName을 찾을 수 없다는 것으로 추정된다 

 

상품 리스트를 db에서 List<dto> 타입으로 가져왔을 때 발생한 오류이다 

 

 

 

오류가 발생한 jsp 코드

15: <h2>Hello!</h2>
16: <div>JSP List Test</div>
17: <c:forEach var="item" items="${list}">
18:     Hello! ${item.pName} <br />
19: </c:forEach>
20: </body>
21: </html>

 

원인

JSTL의 EL 태그를 잘못 쓴 경우

1. items = "${list}"에 공백이 있거나 ""를 적지 않은 경우

잘못된 예시

items = ${list}  //""가 없음 

items = " ${list} " //""사이에 공백이 있음

 

 

2. el 태그를 사용할 때 대문자로 선언된 변수명이 있는 경우 오류가 발생한다

잘못된 예시

${item.Pname}

 

2-1. 변수명 명명규칙에 따라 작성하기 때문에 대문자로 인한 오류는 절대 아닐거라 단정했으나, 

변수명 두번째 자리가 대문자인 경우에도 오류가 발생한다고 한다 

 

오류가 나는 변수명 예시

String Pname; > ${item.Pname}

String pName; > ${item.pName}

 

 

※ jsp 코드를 보면 알겠지만 에러의 원인이 바로 이 경우에 해당했다.

혹시나해서 다른 컬럼을 입력한 결과 제대로 출력됨을 확인할 수 있었다

 

 

 

 

 

Dto 혹은 Vo의 문제인 경우

혹은 Dto 또는 Vo 클래스에 getter가 선언되지 않은 경우에도 해당 오류가 발생한다고 한다





해결

다른 방법도 있을 것 같지만 컬럼 이름을 바꾸는 방식으로 해결했다

alter table 테이블 이름 change 컬럼 바꿀컬럼명 타입 제약조건;

→ alter table coffee_product change pName pname varchar(30) not null;

 

상품명도 제대로 출력됨을 확인할 수 있다