본문 바로가기
프레임워크/스프링

[Spring] TMDB API 영화 데이터 DB 저장 (2)

by Yikanghee 2022. 5. 14.

Controller에서 값을 전달한 뒤 Service에서 처리하는 로직을 작성해 보겠다

 

@RequiredArgsConstructor
@Service
@Slf4j
public class ApiService {

    private final MovieRepository movieRepository;

    LocalDateTime dateTime = LocalDateTime.now();

    public String getInfo(String result) {

        JsonArray list = null;

        log.info("서비스 시작" );
        JsonParser jsonParser = new JsonParser();
        JsonObject jsonObject = (JsonObject) jsonParser.parse(result);
        list = (JsonArray) jsonObject.get("results");

        for (int k = 0; k < list.size(); k++) {
            JsonObject contents = (JsonObject) list.get(k);

            String ImgUrl = "https://image.tmdb.org/t/p/w200";
            String match = "[\"]";

            movieRepository.save(
                    Movie.builder()
                            .description(contents.get("overview").toString())
                            .title(contents.get("title").toString())
                            .imgUrl(ImgUrl + contents.get("poster_path").toString().replaceAll(match, ""))
                            .createdAt(dateTime)
                            .modifiedAt(dateTime)
                            .build()
            );

        }
        return "ok";
    }

}

원래 Array로 되어있던 값을 쪼개어 Json 형식으로 만들고 그 정보를 JsonObject contents에 넣었다

그리고 값을 Repository에 넣어주었다

ImgUrl을 추가로 넣어주어야 + .jpg 형태로 이미지 값을 불러올 수 있다

그리고 API에서 값으로 받아올때 "" 로 .jpg가 감싸져 있어서 정규식을 사용하여 없애주었다

 

다음으로 JPA MovieRepository를 작성해주고

 

@Entity
@Getter
@Setter
@EqualsAndHashCode(of = "id")
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Movie {
    @Id @GeneratedValue
    private Long id;

    private String imgUrl;

    @Column(nullable = false)
    private String title;

    @Lob
    @Column(nullable = false)
    private String description;

    private LocalDateTime createdAt;

    private LocalDateTime modifiedAt;

domain 을 작성해주면 로직 완성이다

 

이제 이 값을 React로 보내서 React에서 값을 처리해주면 완성이다.

 

React에서 값 처리하는게 너무 힘들어서 오랜 기간 삽질했다...

댓글