springboot jpa array,list 데이터 넣기

육희영·2023년 5월 2일

회고록

목록 보기
18/24

model, controller에 저장할때, axios로 값 보낼때 순서대로 예시가 나와있다.

@Entity
@Getter
@Setter
public class Wish {
    @Id
    @Column(name = "wish_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ElementCollection
    @CollectionTable(name="content_genres")
    private List<Genre> content_genres = new ArrayList<>();

    @Embeddable
    @Getter
    @Setter
    public static class Genre {
        @Column(name = "genre_id")
        private int id;
        @Column(name = "genre_name")
        private String name;

        public Genre() {}

        public Genre(int id, String name) {
            this.id = id;
            this.name = name;
        }
    }

}

    @PostMapping("/dataSave")
    public Wish createWish(@RequestBody Wish wish) {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String username = authentication.getName();

        if (wish.getContent_genres() == null) {
            wish.setContent_genres(new ArrayList<>());
        }

        List<Wish.Genre> genres = new ArrayList<>();
        for (Wish.Genre genre : wish.getContent_genres()) {
            Wish.Genre newGenre = new Wish.Genre();
            newGenre.setId(genre.getId());
            newGenre.setName(genre.getName());
            genres.add(newGenre);
        }
        wish.setContent_genres(genres);

        wish.setUser_id(username);
        return wishRepository.save(wish);
    }
    
       const handleFalseWishIcon = (): void => {
        setWishIcon((wishIcon: boolean) => !wishIcon);
        const genresArray = (tvDetail?.genres || []).map((genre: any) => {
            if (genre.id && genre.name) {
                return { id: genre.id, name: genre.name };
            }
            return null;
        }).filter((genre: any) => genre !== null);


        axios.post("/wish/dataSave",{
            removed_at: null,
            content_id: tvDetail.id,
            content_genres: genresArray,
            content_title: tvDetail.name,
            content_poster: tvDetail.poster_path
        }).then((response) => {
            console.log(response.data)
        })
    };

0개의 댓글