inflearn logo
강의

Course

Instructor

Real-world! Spring Boot and JPA Utilization 2 - API Development and Performance Optimization

Simple Order Lookup V2: Converting Entities to DTOs

Dto Json 출력 오류 질문

428

tobeykwon3414

7 asked

1

Address 필드가 Response 시 빈 객체로 나옵니다.

[
{
"orderId": 4,
"name": "userA",
"orderDate": "2022-06-26T00:43:08.07663",
"orderStatus": "ORDER",
"address": {}
},
{
"orderId": 11,
"name": "userB",
"orderDate": "2022-06-26T00:43:08.155045",
"orderStatus": "ORDER",
"address": {}
}
]

log를 찍어 봤는데 아래와 같이 dto에 address는 잘 들어가있습니다.

2022-06-26 00:43:11.618  INFO 4953 --- [nio-8080-exec-2] j.jpashop.api.OrderSimpleApiController   : dto address = Address(city=서울, street=1, zipcode=1111)

2022-06-26 00:43:11.618  INFO 4953 --- [nio-8080-exec-2] j.jpashop.api.OrderSimpleApiController   : dto address = Address(city=진주, street=2, zipcode=2222)

뭐가 문제일까요 ㅠㅠㅠ

전체코드

package jpabook.jpashop.api;

import jpabook.jpashop.domain.entity.Address;
import jpabook.jpashop.domain.entity.Order;
import jpabook.jpashop.domain.entity.OrderStatus;
import jpabook.jpashop.domain.repository.OrderRepository;
import jpabook.jpashop.domain.repository.OrderSearch;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
* xToOne(ManyToOne, OneToOne)
* Order
* Order -> Member
* Order -> Delivery
*/
@Slf4j
@RestController
@RequiredArgsConstructor
public class OrderSimpleApiController {

private final OrderRepository orderRepository;

@GetMapping("/api/v1/simple-orders")
public List<Order> ordersV1() {

List<Order> all = orderRepository.findAllByString(new OrderSearch());
all.stream().forEach(o -> {
o.getMember().getName(); // Lazy 강제 초기화
o.getDelivery().getAddress(); // Lazy 강제 초기화
});
return all;
}

@GetMapping("/api/v2/simple-orders")
public List<SimpleOrderDto> ordersV2() {
List<Order> orders = orderRepository.findAllByString(new OrderSearch());

List<SimpleOrderDto> result = orders.stream()
.map(SimpleOrderDto::new)
.collect(Collectors.toList());

result.forEach(dto -> log.info("dto address = {}", dto.getAddress()));
return result;
}

@Data
static class SimpleOrderDto {
private Long orderId;
private String name;
private LocalDateTime orderDate;
private OrderStatus orderStatus;
private Address address;

public SimpleOrderDto(Order order) {
orderId = order.getId();
name = order.getMember().getName();
orderDate = order.getOrderDate();
orderStatus = order.getStatus();
address = order.getDelivery().getAddress();
}
}
}

질문 spring-boot java JPA spring

Answer 1

0

tobeykwon3414

Address 엔티티에 getter를 설정하지 않아서 생겼던 문제였습니다.

강의 관련 외 질문입니다.

0

62

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

85

1

BeanCreationException

0

86

3

Update 후 UpdateMemberResponse 매핑할 때

0

46

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

96

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

81

1

루트 쿼리라는것은

0

58

1

메서드를 분리하는 기준

0

61

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

108

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

83

2

fetch join과 영속화와 OSIV의 관계

0

83

2

Distinct 사용 전 결과에 대한 의문

0

112

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

55

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

77

2

dto 필드 속 엔티티 여부

0

58

1

뷰템플릿 사용 시

0

76

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

85

1

DTO 대신 Form 사용은 안되나요?

0

133

1

OSIV ON 상태일 때

0

94

1

fetch join VS fetch join 페이징 궁금증

0

179

2

양방향 연관관계 알아보는 법?

0

102

1

16강 17강 간단 정리 이게 맞을까요 ?

0

161

2