Closed dongwooklee96 closed 3 years ago
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "사용자 상세 정보를 위한 도메인 객체")
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
@ApiModelProperty(notes = "사용자 이름을 입력해주세요.", example = "사용자 이름")
@Size(min=2, message = "이름은 2글자 이상 입력해주세요.")
private String name;
@ApiModelProperty(notes = "사용자 등록일 입력해주세요.")
@Past
private Date joinDate;
// @JsonIgnore
@ApiModelProperty(notes = "사용자 패스워드를 입력해주세요.")
private String password;
// @JsonIgnore
@ApiModelProperty(notes = "사용자의 주민번호를 입력해주세요.")
private String ssn;
@OneToMany(mappedBy = "user")
private List<Post> posts;
}
package com.example.restfulwebservice.user;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Generated;
import lombok.NoArgsConstructor;
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Post {
@Id
@Generated
private Integer id;
private String description;
// User : Post -> 1 : N
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private User user;
}
POST
엔티티가 같이 로딩되는 것이 아니라, 필요할 경우에 로딩되도록 설정하는 것이다.@PostMapping("/users/{id}/posts")
public ResponseEntity<Post> createPost(@PathVariable int id ,@RequestBody Post post) {
User user = userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(String.format("ID[%s] not found", id)));
post.setUser(user);
Post savedPost = postRepository.save(post);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedPost.getId())
.toUri();
return ResponseEntity.created(location).build();
}
생성 및 조회할 때 정보를 추가하기