Lombok 대소문자 문제해결
프로젝트 진행중에 PropertyNotFoundException 오류가 발생.
찾아보니 보통 오류라고 하는데 그런 경우는
PropertyNotFoundException: property [name] not found of type [java.lang.string] 에러가 대부분이었다.
이런 경우 jsp에서 작성시에 공백이 있거나 오타가 있는 경우라 찾아서 해결하면 된다고 하지만
오타도, 공백도 없었고
not found of type [ProductVO] 형태의 오류였기 때문에 좀 다른 부분에서 문제가 있다고 생각했다.
이러한 경우 jsp에서 vo에 요청했지만 찾을 수 없기 때문에 발생하는 문제라고 해서 원인을 찾지 못하던 중
대소문자만으로도 발생하는 오류라는 것을 찾게 되었다.
<!-- JSP -->
<c:forEach items="${pList}" var="list">
<tr>
<td>${list.pno}</td>
<td>${list.pClassification}</td>
<td>${list.pName}</td>
<td>${list.pPrice}</td>
<td>${list.pRegDate}</td>
</tr>
</c:forEach>
//VO
@Data
public class ProductVO{
private String pno;
private String pClassification;
private String pName;
private string pPrice;
private String pRegDate;
}
이렇게 VO와 JSP를 작성했었는데 계속 pClassification부분에서 오류가 있었다.
보통은 대소문자가 원인인 경우 VO에서 대문자로 시작을 하게 되는 경우가 문제였다는 해결방안이 많았다.
Pclassification 이라고 VO에서 작성한 경우에는 jsp에서 pclassification형태로 첫 시작문자를 소문자로 바꿔줘야 한다는
문제였는데 이것도 나는 해결되지 않았다.
컨트롤러에서도 문제가 없고, JSP에서도 오타나 공백이나 forEach를 잘못 사용한것도 아니었고 VO에도 오타나 문제가 없었기 때문에 대소문자형태가 문제일 수 있겠거니 해서 수정해본 결과 해결이 되었다.
<!-- JSP -->
<c:forEach items="${pList}" var="list">
<tr>
<td>${list.pno}</td>
<td>${list.PClassification}</td>
<td>${list.PName}</td>
<td>${list.PPrice}</td>
<td>${list.PRegDate}</td>
</tr>
</c:forEach>
이렇게 변경해주니 정상적으로 잘 출력되었다.
이전 프로젝트 진행하면서는 한번도 대소문자 문제로 이랬던 적이 없어서 찾아보니 롬복에서 만들어주는 getter, setter와 직접 만드는 getter, setter의 차이였다.
롬복은 카멜케이스를 이용한 getter, setter 메서드를 만들때 첫문자가 대문자로 작성되기 때문이다.
pName을 예로 들자면 롬복이 만들어주는 getter는 getPName 형태가 되고
Gennerate Getter and Setter로 만든다면 getpName 형태가 된다.
그렇기 때문에 롬복을 사용하는것과 만들어서 사용하는 것에서 차이가 발생한다.
그래서 롬복을 사용할때는 ${list.PName}형태가 되지만 롬복을 사용하지 않는다면 ${list.pName}으로 사용해야 한다.
단, 롬복의 경우에도 첫글자가 한글자인 경우에만 대문자가 되는것이라고 한다.
처음 글을 보고 이해가 안되었던 부분이긴 한데 pno의 경우는 Pno가 아닌 pno로 사용이 가능했고 오히려 Pno에서 오류가 발생했기 때문이다.
아마 첫글자 뒤로 한 단어가 이루어지지 않았기 때문 아니었을까........ 한다
이전 프로젝트에서는 이렇게 앞에 한글자만 붙여주는게 아닌 productNo 이런 형태로 붙여줬기 때문에 지금까지 문제가 없지 않았나 싶다.
이거때문에 오늘 하루 다 날려먹었따..........................................................ㅠㅠ
참조
https://eugene-kim.tistory.com/63