package com.backend.together.domain.post.dto;
import com.backend.together.domain.category.Category;
import com.backend.together.domain.enums.Gender;
import com.backend.together.domain.enums.PostStatus;
import com.backend.together.domain.mapping.PostHashtag;
import com.backend.together.domain.post.Hashtag;
//import com.backend.domain.post.PostImage;
import com.backend.together.domain.post.Post;
import com.backend.together.domain.post.PostImage;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import org.hibernate.Hibernate;
import java.util.ArrayList;
import java.util.List;
@Data
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class PostRequestDTO {
@NotNull
Long id;
@NotNull
Long memberId;
@NotNull
String title;
@NotNull
Gender gender;
@NotNull
Integer personNum;
@NotNull
String content;
@NotNull
PostStatus status;
Long view;
// @JsonIgnore // 무한 루프 방지
// List<PostImage> postImageList;
@NotNull // 바꿔야함
Category category;
// @JsonIgnore
// List<PostHashtag> postHashtagList;
public PostRequestDTO(Post post) {
this.id = post.getId();
this.memberId = post.getMemberId();
this.title = post.getTitle();
this.gender = post.getGender(); // enum
this.personNum = post.getPersonNum();
this.content = post.getContent();
this.status = post.getStatus(); // enum
this.view = post.getView();
// Load the category to avoid Hibernate proxy issues
Hibernate.initialize(post.getCategory());
this.category = post.getCategory();
//// this.postImageList = post.getPostImageList();
// this.postImageList = postImageList != null ? new ArrayList<>(postImageList) : null;
this.category = post.getCategory(); //enum
//// this.postHashtagList = post.getPostHashtagList();
// this.postHashtagList = postHashtagList != null ? new ArrayList<>(postHashtagList) : null;
}
// member
public static Post toEntity(final PostRequestDTO dto) {
return Post.builder()
.id(dto.getId())
.memberId(dto.getMemberId())
.title(dto.getTitle())
.gender(dto.getGender()) // enum
.personNum(dto.getPersonNum())
.content(dto.getContent())
.status(dto.getStatus()) // enum
.view(dto.getView())
// .postImageList(dto.getPostImageList())
.category(dto.getCategory()) // enum
// .postHashtagList(dto.getPostHashtagList())
.build();
}
// public Post toPost
}

@PostMapping("/") // gender, memberid, category 해결해야함
public ResponseEntity<?> createPost(@RequestBody PostRequestDTO requestDTO) {
Post newPost = PostRequestDTO.toEntity(requestDTO);
service.createPost(newPost);
PostRequestDTO returnPostDTO = newPost
return ResponseEntity.ok().body(requestDTO);
}
원인 1: controller에서 id값이 설정되지 않은 dto값을 return해서 id값이 null로 뜬 것이었다.
@PostMapping("/") // gender, memberid, category 해결해야함
public ResponseEntity<?> createPost(@RequestBody PostRequestDTO requestDTO) {
Post newPost = PostRequestDTO.toEntity(requestDTO);
service.createPost(newPost);
// 다시 조회하여 반환
Optional<Post> savedPost = service.retrievePostById(newPost.getId()); // 예시로 findById 메서드를 사용했으며, 실제 사용하는 메서드에 따라 다를 수 있습니다.
if(savedPost.isEmpty()) {
return ResponseEntity.badRequest().body(savedPost);
}
return ResponseEntity.ok().body(savedPost);
}
-> 저장된 entity를 다시 조회하는 방식으로 수정

해결되었다.
'SpringBoot > TOgether' 카테고리의 다른 글
| ConverterFactory 생성과 등록. String -> Enum 변환 (0) | 2024.01.17 |
|---|---|
| spring boot controller 테스트1: mysql 데이터 넣기 (0) | 2024.01.16 |