🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

김영한님 강의 JPA 활용1편- 회원목록조회 관련 질문입니다

24.02.21 21:41 작성 조회수 97

0

목록 조회를 하면서 컨트롤러도 맞게 구성했고

 

@GetMapping(value = "/members")
public String list(Model model){

List<Member> members = memberService.findMembers();
model.addAttribute("members", members);

// lo
g.info(members.get(0).getId().toString());
return "members/memberList";
}

html은 그대로 붙여넣기를 했는데

<!DOCTYPE HTML>
<html
xmlns:th="http://www.thymeleaf.org">
<he
ad th:replace="fragments/header :: header" />

<body>

<div
class="container">
<div
th:replace="fragments/bodyHeader :: bodyHeader" />
<div>
<table
class="table table-striped">
<thead>
<tr>
<th>
#</th>
<th>
이름</th>
<th>
도시</th>
<th>
주소</th>
<th>
우편번호</th>
</tr>
</thead>
<tbody>
<tr
th:each="member : ${members}">

<!-- <td th:text="${member}"></td>-->
<!-- 멤버도 들어오는데 id에만 접근이 안된다 getter있는데 왜 안된지-->

<td th:text="${member.id}"></td>
<td
th:text="${member.name}"></td>
<td
th:text="${member.address?.city}"></td>
<td
th:text="${member.address?.street}"></td>
<td
th:text="${member.address?.zipcode}"></td>


</tr>
</tbody>
</table>
</div>

<div
th:replace="fragments/footer :: footer" />
</div>
<!-- /container -->

</body>
</html>

member의 id에 접근할 수 없다는 에러가 나옵니다

 

컨트롤러에서 중간에

log.info(members.get(0).getId().toString());

로그를 찍어본결과 하나입력했을 떄 1이 나오고

그리고 html에서도 객체 주소가 나와서 전달은 되는것 같은데 접근이 안된다고 합니다

<!-- <td th:text="${member}"></td>--> =>주소나옴

 

Member클래스에 롬복으로 getter setter도 넣었는데 왜 접근이 안된다고 나올까요?

@Entity
@Getter @Setter
public class Member {

@Id @GeneratedValue
@Column
(name = "member_id")
private Long id;

private String name;

@Embedded
private Address address;

@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();

}

 

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.22

안녕하세요, 인프런 AI 인턴입니다.

황지환님의 질문에 답변 드리겠습니다.

SpelEvaluationException: Accessing member 'id' is forbidden for type 'class jakarta.domain.Member' 오류는 Thymeleaf 템플릿에서 Member 클래스의 id 프로퍼티에 접근할 수 없을 때 발생합니다. 보안 설정이나 메소드 접근 규칙 때문에 이러한 문제가 발생할 수 있습니다.

로그를 통해 컨트롤러 내에서는 id 값을 정상적으로 확인하신 것을 기반으로, 롬복의 @Getter 어노테이션이 제대로 적용되었는지 확인해보시기 바랍니다. 이때 주의할 점은 롬복 어노테이션을 사용하기 위해서는 롬복 라이브러리가 프로젝트에 추가되어 있어야 하며, IDE에서 롬복 플러그인이 활성화되어 있어야 한다는 것입니다.

또한 Kotlin과 같은 다른 JVM 언어를 사용할 경우 특정 상황에서 롬복이 제대로 동작하지 않을 수 있으니, 이에 대해서도 검토해보시는 것이 좋습니다.

정상적으로 롬복 설정이 되어 있다면, 접근 권한이 제한되어 있는지도 확인해볼 필요가 있습니다. 이를 위해선 spel.ignoreMethodAccess, spel.ignorePropertyAccess와 같은 프레임워크의 설정을 살펴보시고 필요 시 해당 문제가 발생하지 않도록 설정을 조정해야 합니다.

예외 상황에서 보안 제한으로 프로퍼티에 접근할 수 없는 경우는 드물지만, 프로퍼티 이름이 문제가 될 수도 있습니다. id 대신 다른 이름의 프로퍼티에 접근해 본다든가, Thymeleaf의 구문에 오류가 없는지 등을 확인해 보세요.

해당 문제를 해결하기 위해선 좀 더 구체적인 에러 메시지와 실제 코드 상황을 확인할 필요가 있습니다. 만약 위의 내용으로 해결이 안 될 경우, 스택 트레이스에서 더 자세한 에러 원인을 찾아보시기 바랍니다.

채널톡 아이콘