[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (9)
2021. 4. 12. 15:41ㆍSpring/Practice
1. 문제
- REST API 형식으로 구현
- HTTP METHOD는 POST
- 요청 주소는 "/api/notice"
- 전달되는 파라미터는 application/json 형식의 제목, 내용을 입력 받음
- 전달된 값을 저장하기 위한 JPA Repository와 Entity를 통해 데이터베이스에 저장
- 리턴값은 저장된 id값이 포함된 Entity 리턴
2. 풀이
- 패키지 구조
config
ㄴㅡ SecurityConfig
notice
ㄴㅡ controller
ㄴㅡ ApiNoticeController
ㄴㅡ entity
ㄴㅡ Notice
ㄴㅡ model
ㄴㅡ NoticeModel -> NoticeInput
ㄴㅡ repository
ㄴㅡ NoticeRepository
- application.yml
spring:
h2:
console:
enabled: true
path: /h2-console
datasource:
url: jdbc:h2:mem:backofficeDb
driver-class-name: org.h2.Driver
username: root
password: '1111'
jpa:
hibernate:
ddl-auto: create-drop # none
generate-ddl: true # false
properties:
format_sql: true
hibernate:
show-sql: true
mvc:
hiddenmethod:
filter:
enabled: true
mustache:
suffix: .html
logging:
level:
org.hibernate.SQL: trace
org.hibernate.type: trace
- Notice.java
package com.example.jpa.sample.notice.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Data
public class Notice {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String title;
@Column
private String contents;
@Column
private LocalDateTime regDate;
}
- NoticeRepository.java
package com.example.jpa.sample.notice.repository;
import com.example.jpa.sample.notice.entity.Notice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface NoticeRepository extends JpaRepository<Notice, Long> {
}
- NoticeModel -> NoticeInput.java
package com.example.jpa.sample.notice.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor // 모든 필드의 생성자
@NoArgsConstructor // 기본 생성자
@Builder // 빌더 패턴
@Data // Getter, Setter
public class NoticeInput {
private String title;
private String contents;
}
- ApiNoticeController.java
package com.example.jpa.sample.notice.controller;
import com.example.jpa.sample.notice.entity.Notice;
import com.example.jpa.sample.notice.model.NoticeInput;
import com.example.jpa.sample.notice.repository.NoticeRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@RequiredArgsConstructor
@RestController
public class ApiNoticeController {
private final NoticeRepository noticeRepository;
/*
// 문제 6
@GetMapping("/api/notice")
public String noticeString() {
return "공지사항입니다.";
}
*/
/*
// 문제 7
@GetMapping("/api/notice")
public NoticeModel notice() {
LocalDateTime regDate = LocalDateTime.of(2021, 1, 1, 0, 0);
NoticeModel notice = new NoticeModel();
notice.setId(1);;
notice.setTitle("공지사항입니다.");
notice.setContents("공지사항 내용입니다.");
notice.setRegDate(regDate);
return notice;
}
*/
/*
// 문제 8
@GetMapping("/api/notice")
public List<NoticeModel> notice() {
List<NoticeModel> noticeList = new ArrayList<>();
noticeList.add(NoticeModel.builder()
.id(1)
.title("공지사항입니다.")
.contents("공지사항 내용입니다.")
.regDate(LocalDateTime.of(2021, 1, 1, 0, 0))
.build()
);
noticeList.add(NoticeModel.builder()
.id(2)
.title("두번째 공지사항입니다.")
.contents("두번째 공지사항 내용입니다.")
.regDate(LocalDateTime.of(2021, 1, 2, 0, 0))
.build()
);
return noticeList;
}
*/
// 문제 9
@GetMapping("/api/notice")
public List<NoticeInput> notice() {
List<NoticeInput> noticeList = new ArrayList<>();
// return null;
return noticeList;
}
// 문제 10
@GetMapping("/api/notice/count")
public int noticeCount() {
// return "10";
return 10;
}
/*
// 문제 11
@PostMapping("/api/notice")
public NoticeModel addNotice(@RequestParam String title, @RequestParam String contents) {
NoticeModel notice = NoticeModel.builder()
.id(1)
.title(title)
.contents(contents)
.regDate(LocalDateTime.now())
.build();
return notice;
}
*/
/*
// 문제 12
@PostMapping("/api/notice")
public NoticeModel addNotice(NoticeModel noticeModel) {
noticeModel.setId(2);
noticeModel.setRegDate(LocalDateTime.now());
return noticeModel;
}
*/
/*
// 문제 13
@PostMapping("/api/notice")
public NoticeModel addNotice(@RequestBody NoticeModel noticeModel) {
noticeModel.setId(3);
noticeModel.setRegDate(LocalDateTime.now());
return noticeModel;
}
*/
// 문제 14
@PostMapping("/api/notice")
public Notice addNotice(@RequestBody NoticeInput noticeInput) {
Notice notice = Notice.builder()
.title(noticeInput.getTitle())
.contents(noticeInput.getContents())
.regDate(LocalDateTime.now())
.build();
return noticeRepository.save(notice);
}
}
728x90
'Spring > Practice' 카테고리의 다른 글
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (11) (0) | 2021.04.12 |
---|---|
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (10) (0) | 2021.04.12 |
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (8) (0) | 2021.04.12 |
[Practice] 공지사항 게시판 목록에 대한 요청 API 만들기 (7) (0) | 2021.04.12 |