API 설계하기


각각 상황에 맞게 먼저 API를 설계해주었다. 메모 변경과 삭제에는 id가 필요하므로 URL뒤에 추가로 {id}가 붙는다
Repository 만들기
Memo클래스 만들기
- 메모는 1) 익명의 작성자 이름(username), 2) 메모 내용(contents) 으로 이루어져 있습니다.
- domain 패키지를 만듭니다.
Memo.java
@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String contents;
public Memo(String username, String contents) {
this.username = username;
this.contents = contents;
}
public Memo(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
}
Timestamped.java
@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public class Timestamped {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
MemoRepository 인터페이스 만들기
MemoRepository.java
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findAllByOrderByModifiedAtDesc();
}
MemoRequestDto
@Getter
public class MemoRequestDto {
private String username;
private String contents;
}
Service 만들기
- src > main > java > com.sparta.week03 에 service 패키지를 만든다.
- 해당 패키지 아래에 MemoService.java 파일을 만든다.
MemoService.java
@RequiredArgsConstructor
@Service
public class MemoService {
private final MemoRepository memoRepository;
@Transactional
public Long update(Long id, MemoRequestDto requestDto) {
Memo memo = memoRepository.findById(id).orElseThrow(
() -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
);
memo.update(requestDto);
return memo.getId();
}
}
Memo.java에 update 메소드 추가하기
public void update(MemoRequestDto requestDto) {
this.username = requestDto.getUsername();
this.contents = requestDto.getContents();
}
Controller 만들기
src > main > java > com.sparta.week03 에 controller 패키지 만들기
MemoController.java 시작
@RequiredArgsConstructor
@RestController
public class MemoController {
private final MemoRepository memoRepository;
private final MemoService memoService;
}
Create
MemoController.java
@PostMapping("/api/memos")
public Memo createMemo(@RequestBody MemoRequestDto requestDto) {
Memo memo = new Memo(requestDto);
return memoRepository.save(memo);
}
Read
MemoController.java
@GetMapping("/api/memos")
public List<Memo> getMemos() {
return memoRepository.findAllByOrderByModifiedAtDesc();
}
Delete
MemoController.java
@DeleteMapping("/api/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
memoRepository.deleteById(id);
return id;
}
Update API 만들기
@PutMapping("/api/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
memoService.update(id, requestDto);
return id;
}
'공부기록 > 자바 스프링' 카테고리의 다른 글
| 3-0. 키워드 (0) | 2022.01.24 |
|---|---|
| 2-2. 클라이언트 설계 (0) | 2022.01.24 |
| 2-0. 키워드 (0) | 2022.01.22 |
| 1-2. (상속),(JPA심화) (0) | 2022.01.22 |
| 1-1. (RDBMS) (H2) (SQL) (JPA) (0) | 2022.01.21 |