인프런 커뮤니티 질문&답변

focandlol님의 프로필 이미지
focandlol

작성한 질문수

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

JPA를 이용한 개별 사용자 상세 조회 5분 21초

작성

·

141

0

섹션 5. Java Persistence API 사용

JPA를 이용한 개별 사용자 상세 조회 5분 21초 캡처 화면입니다.

응답 값으로 id는 없고 name, joinDate, link정보만 나오는 이유가 궁금합니다.

 

답변 2

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다.

답변이 늦어 죄송합니다.

Response Body에 전달 되는 데이터는 ResponseEntity로 반환 시 Bean(User.class 등)에 대한 모든 정보가 반환 되게 하지 않고 Filter를 통해 반환 하고자 하는 값들을 제어 할 수 있습니다.

아래 코드처럼 SImpleBeanPropertyFilter를 사용하시거나, User 클래스의 Proeprty에 @JsonIgnore를 명시적으로 표시해서 전달하지 않을 수 있습니다. 테스트하신 코드를 보지 못해 작업하신 결과의 정확한 과정은 파악하기 어려우나, 강의에서도 AdminUserController등을 생성해서 Response Body에 전달하는 값들을 제어하고 있습니다.

SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter
        .filterOutAllExcept("id", "name", "joinDate", "ssn");

FilterProvider filters = new SimpleFilterProvider().addFilter("UserInfo", filter);
//    @JsonIgnore
    @Schema(title = "비밀번호", description = "사용자의 비밀번호를 입력해 주세요.")
    private String password;

//    @JsonIgnore
    @Schema(title = "주민번호", description = "사용자의 주민번호를 입력해 주세요.")
    private String ssn;

추가로 _links 값은 SPring HATEOAS 기능을 통해 하이퍼미디어 URI가 자동으로 생성되게 매핑된 데이터입니다. 추가 질문사항 있으시면 다시 글 남겨 주세요.

감사합니다.

0

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

focandlol님, JPA를 이용한 개별 사용자 상세 조회에서 응답값으로 id가 나오지 않는 이유는 사용하는 JPA 엔티티나 DTO에서 id 필드를 결과에 포함시키지 않도록 설정했기 때문일 가능성이 높습니다. 일반적으로, 엔티티 클래스를 정의할 때 어떤 필드를 외부에 노출할지 결정할 수 있으며, 이는 @JsonIgnore 같은 애노테이션을 사용하거나 별도의 DTO(Data Transfer Object)를 정의하여 구현할 수 있습니다.

또한, Spring Data REST와 같이 사용할 경우 Repository의 내용을 직접 웹에 노출시키는데, 이 때 보안이나 비즈니스 로직에 따라 일부 정보를 숨길 필요가 있을 수 있으므로, 해당 설정이 적용되었을 수 있습니다.

응답 값에서 특정 필드를 포함시키고 싶다면, 해당 엔티티의 클래스 정의를 확인하거나, 사용중인 JPA Repository의 쿼리 메소드 또는 @RestController 클래스에서 응답 값을 조정하는 부분을 검토하시기 바랍니다.

focandlol님의 프로필 이미지
focandlol

작성한 질문수

질문하기