
URL, Http Method를 활용한 기본 라우팅 방법 학습Request Body, Query Params, Path Params 사용{
"title": "제목이에옹",
"content": "내용이에옹"
}
@RestController
@RequestMapping("/boards")
public class BoardController {
@PostMapping
public String createPost(@RequestBody PostRequest request) {
return "Post Title:" + request.getTitle();
}
}
@RequestBody가 이 내용을 자바 객체(PostReqeust)로 변환? 뒤에 key=value 형식으로 데이터를 전달하는 방식@RequestParam에서 자주 사용되는 속성required (기본값: true)nulldefaultValuenameGET /user?uid=123 → User ID: 123
@GetMapping("/user")
public String getUser(@RequestParam(name = "uid") String userId) {
return "User ID: " + userId;
}
GET /users/1
1이 id} 부분에 들어가서 컨트롤러의 id값으로 매핑@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUserById(@PathVariable Long id) {
return "User ID: " + id;
}
}
@RequestBody : JSON 데이터를 전송할 때 @RequestParam : 필터링, 정렬 등 검색 조건을 전달할 때 @PathVariable : 사용자 id 등 특정 리소스를 식별할 때 strategy 속성을 사용해 어떤 방식으로 ID를 생성할지 설정 가능 ⚠️ IDENTITY 전략은 JPA가 ID값을 미리 알 수 없어서 batch insert 최적화 불가능
| 전략 | 설명 | 특징 |
|---|---|---|
IDENTITY | DB의 AUTO_INCREMENT 기능 사용 | MySQL, PostgreSQL 등에서 사용 |
SEQUENCE | DB의 SEQUENCE 객체 사용 | Oracle, PostgreSQL 등에서 사용 |
TABLE | 키 값을 저장하는 별도 테이블 사용 | 자주 사용❌ |
AUTO | DB에 맞게 자동 선택 | DB에 따라 적절한 전략을 자동으로 선택 |
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
@CreationTimestamp
@Column(name="created_at", updatable = false)
private LocalDateTime createdAt;
}
ResponseEntity<T>로 변경했다.HttpStatus.CREATED 반환(201)HttpStatus.OK 반환(200)HttpStatus.OK 반환(200)HttpStatus.NO_CONTENT 반환(204) // 게시글 작성
@PostMapping("/post")
public ResponseEntity<PostResponse> savePost(@RequestBody @Valid PostCreateRequest request){
return postService.savePost(request);
}
// 게시글 작성
public ResponseEntity<PostResponse> savePost(PostCreateRequest request){
Post savedPost = postRepository.save(new Post(request));
return ResponseEntity.status(HttpStatus.CREATED).body(new PostResponse(savedPost));
}
CRUD 기능을 수행할 때ResponseEntity.status로 상태코드를 지정하지 않으면 어떤 코드가 전달될까?T>ResponseEntity<T>는 Spring에서 HTTP응답을 표현하는 클래스로HttpStatus), 응답 본문(body)을 함께 반환할 수 있도록 한다.1. HTTP 상태 코드 포함
2. 응답 본문 설정 가능
ResponseEntity<T>에서 T에 해당하는 객체를 JSON 형태로 반환 가능3. 헤더 설정 가능
ResponseEntity.headers()를 통해 추가적인 응답 헤더 설정 가능그래서 반환타입에서
ResponseEntity와HttpStatus를 사용하지 않으면 어떻게 되냐구!
ResponseEntity<T>를 사용하지 않고 단순히 객체를 반환하면,@PostMapping("/post")
public PostResponse savePost(@RequestBody @Valid PostCreateRequest request) {
return postService.savePost(request);
}
PostResponse 객체가 반환되면, Spring은 기본적으로 HttpStatus 200 OK로 설정ResponseEntity<T>를 사용하지 않는다면, 단순히 PostResponse 객체를 반환public PostResponse savePost(PostCreateRequest request){
Post savedPost = postRepository.save(new Post(request));
return new PostResponse(savedPost);
}
PostResponse 객체만 반환200 OK로 설정200 OK만 반환되어 상태 구분이 어려움