[Spring]RESTFul Server 만들어보기

2024. 1. 10. 15:19· 공부/Spring
목차
  1. 패키지 관리법
  2. 패키지 추가
  3. Lecture
  4. LectureDto
  5. LectureController
  6. Teacher
  7. TeacherController
  8. TeacherDto
반응형

# RESTFul Server 만들어보기

  • 데이터베이스 없이 고정 데이터를 반환하는 Server를 작성해본다.

Untitled.png

패키지 관리법

  • 계층형패키지 vs 도메인형 패키지

Untitled.png

  • 프로젝트 규모가 작다면 어떤 방법을 사용해도 문제 없다.
  • 프로젝트가 커진다면 도메인형 패키지를 고려하는 것이 좋다.
  • 이 글에서는 도메인형으로 만들어볼 예정

패키지 추가

  • lecture - controller, dto
  • teacher - controller, dto
  • 각 도메인 내부에 repository, service, entity 등의 패키지가 추가된다.

Untitled.png

Lecture

LectureDto

package com.example.myschool.lecture.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class LectureDto {
	private int lectureId;
	private int teacherId;
	private String title;
	private String descriptiton;
}

LectureController

package com.example.myschool.lecture.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.myschool.lecture.dto.LectureDto;

@RestController
public class LectureController {
	private List<LectureDto> lectures = new ArrayList<LectureDto>();
	public LectureController() {
		lectures.add(new LectureDto(1, 1, "Java", "Java language Basic Course"));
		lectures.add(new LectureDto(2, 2, "Spring boot", "Spring Boot with java"));
		lectures.add(new LectureDto(3, 1, "Kotlin", "Kotlin language Basic Course"));
		lectures.add(new LectureDto(4, 2, "Spring boot(kotlin)", "Spring Boot with kotlin"));
		lectures.add(new LectureDto(5, 3, "Node.js", "Node.js + express"));
		}
	
	
	@GetMapping("/lectures")
	public List<LectureDto> getLectures(@RequestParam(name="title", required=false) String title) {
		if(title == null)
			return lectures;
		return lectures.stream()
				.filter(l->l.getTitle().toUpperCase().contains(title.toUpperCase()))
				.collect(Collectors.toList());
	}
	
	@GetMapping("/lectures/{id}")
	public LectureDto getLecture(@PathVariable("id") int id) {
		return lectures.stream()
				.filter(l->l.getLectureId()==id)
				.findFirst()
				.orElse(null);
	}
}
  • /lectures 로 접속 시 모든 수업목록들이 응답이 된다.
    • 만약 쿼리스트링 “?title=” 형태로 요청이 오면 수업 목록의 title 중에 포함된 요소를 보여준다.
  • /lectures/{id} 는 PathVariable로 구성되어져 있다. 우리가 흔히 블로그 같은데 들어가면 볼 수 있는 형식이다 “https://blog.naver.com/tmp/123123” id는 LectureId와 동일한 값이 있으면 해당 객체를 반환한다.

Teacher

TeacherController

package com.example.myschool.teacher.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.myschool.teacher.dto.TeacherDto;

@RestController
public class TeacherController {
	private List<TeacherDto> teachers = new ArrayList<TeacherDto>();
	
	public TeacherController() {
		teachers.add(new TeacherDto(1,"홍길동","Java/Kotlin Language Teacher"));
		teachers.add(new TeacherDto(2,"홍길삼","Spring Framework Teacher"));
		teachers.add(new TeacherDto(3,"박재웅","Node.js Teacher"));
	}
	
	@GetMapping("/teacher")
	public List<TeacherDto> getTeachers(
		@RequestParam(name="name", required=false)String name) {
			if(name == null) {
				return teachers;
			}
			return teachers
					.stream()
					.filter(t->t.getName().toUpperCase().contains(name.toUpperCase()))
					.collect(Collectors.toList());
	}
	
	@GetMapping("/teacher/{id}")
	public TeacherDto getTeacher(@PathVariable("id")int id) {
		return teachers
				.stream()
				.filter(t->t.getTeacherId() == id)
				.findFirst()
				.orElse(null);
	}
}

TeacherDto

package com.example.myschool.teacher.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public class TeacherDto {
	private int teacherId;
	private String name;
	private String description;
}
반응형
  1. 패키지 관리법
  2. 패키지 추가
  3. Lecture
  4. LectureDto
  5. LectureController
  6. Teacher
  7. TeacherController
  8. TeacherDto
'공부/Spring' 카테고리의 다른 글
  • [Spring]JPA살펴보기
  • [Spring]Thymeleaf
  • [Spring]JPA 사용해보기
  • [Spring]WAS(Web Application Server)
Future0_
Future0_
rm -rf /
Future0_
Luna Developer Blog
Future0_
전체
오늘
어제
  • 분류 전체보기 (112)
    • 프로그래밍 (4)
      • 알고리즘 (4)
    • 보안 (14)
      • Dreamhack (4)
      • Hackthebox (1)
      • Webhacking (9)
    • 프로젝트 (4)
    • 공부 (80)
      • Database (2)
      • Python (11)
      • System (4)
      • Java (13)
      • JSP (13)
      • Spring (11)
      • Kotlin (16)
      • 자료구조 (10)
      • 기계학습 (0)
    • Docker (4)
    • Github (2)
    • Tip (1)
    • 잡담 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 알고리즘
  • api 통신
  • webhacking
  • 키 해시
  • android studio 삭제
  • native app
  • Java
  • Kotlin
  • 자료구조
  • Android Studio
  • ViewModel
  • 프로그래밍
  • React
  • 코틀린기본문법
  • 상속
  • jsp
  • docker
  • Computer science
  • 컴퓨터
  • dreamhack
  • spring
  • 보안
  • 1.9.22
  • cs
  • shared preference
  • 디버깅키해시
  • Database
  • Python
  • 자바빈즈
  • SpringBoot

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
Future0_
[Spring]RESTFul Server 만들어보기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.