spring boot rest 예 를 자세히 설명 합 니 다.
뭐 공부 해요?
이 튜 토리 얼 에서 저 희 는 적당 한 URI 와 HTTP 방법 으로 세 개의 서 비 스 를 만 들 것 입 니 다.
@GetMapping("/students/{studentId}/courses"):요청 방법 Get 과 예시 uri/students/Student 1/courses 를 사용 하여 특정 학생 이 등 록 된 과정 을 조회 할 수 있 습 니 다.
@GetMapping("/students/{student Id}/courses/{courseId}"):요청 방법 Get 과 예제 uri/students/Student 1/course/Course 1 을 사용 하여 특정 학생 의 특정 과정 을 얻 을 수 있 습 니 다.
@PostMapping("/students/{student Id}/courses"):UURI/students/student 1/courses 에 POST 요청 을 보 내 학생 들 에 게 과정 을 등록 할 수 있 습 니 다.
필요 한 도구
우리 Github 저장 소 는 모든 코드 예제-https://github.com/in28minutes/in28minutes.github.io/tree/master/code-zip-files 을 포함 합 니 다.
유닛 과 통합 테스트 가 있 는 REST 서비스
Website-springbootrestservices-simplerestserviceswithunitandintegrationtests.zip
REST 가 뭐 예요?
REST 대표 REpresentational State Transfer.REST 는 시스템 구조의 제약 을 지정 했다.다음 과 같은 조건 을 만족 시 키 는 모든 서 비 스 를 RESTful 서비스 라 고 부른다.
RESTful Web Service 의 다섯 가지 중요 한 조건:
Richardson 성숙 도 모델 은 Restful Web Service 의 성숙 도 단 계 를 식별 하 는 데 사용 된다.다음은 서로 다른 등급 과 특징 이다.
레벨 0:SOAP 웹 서 비 스 를 REST 스타일 로 공개 합 니 다.공 개 된 작업 은 REST 서비스(http://server/getPosts,http://server/deletePosts,http:/server/doThis,http:/server/doThat 등)를 사용 합 니 다.
레벨 1:올 바른 URI(명사 사용)를 사용 하여 자원 을 공개 합 니 다.예 를 들 어 http:/server/accounts,http:/server/accounts/10.그러나 HTTP 방법 은 사용 되 지 않 았 다.
레벨 2:자원 은 올 바른 URI+HTTP 방법 을 사용 합 니 다.예 를 들 어 계 정 을 업데이트 하려 면 PUT 를 만들어 야 합 니 다.계 정 을 만 들 고 POST 를 만 드 세 요.Uri 는 posts/1/comments/5 와 accounts/1/friends/1 처럼 보 입 니 다.
레벨 3:HATEOAS(Hypermedia as the engine of application state).귀 하 는 요청 한 정 보 를 알 수 있 을 뿐만 아니 라 서비스 소비자 가 취 할 수 있 는 다음 가능 한 조작 도 알 수 있 습 니 다.페 이 스 북 사용자 에 대한 정 보 를 요청 할 때 REST 서 비 스 는 사용자 의 상세 한 정보 와 최근 게시 물 을 어떻게 얻 는 지,최근 댓 글 을 어떻게 얻 는 지,친구 의 목록 을 어떻게 검색 하 는 지 에 대한 정 보 를 되 돌려 줄 수 있다.
적당 한 요청 방법 을 사용 하 다
HTTP 방법 을 항상 사용 합 니 다.각 HTTP 방법 에 대한 최선 의 방법 은 다음 과 같다.
GET:아무것도 업데이트 해 서 는 안 됩 니 다.같은 결 과 를 여러 번 호출 해 야 합 니 다.가능 한 리 턴 코드 200(OK)+404(NOT FOUND)+400(BAD REQUEST)
POST:새로운 자원 을 만들어 야 합 니 다.이상 적 인 상황 에서 JSON 과 새로 만 든 자원 으로 연결 합 니 다.가능 한 한 같은 반환 코드 를 사용 하 세 요.또한 반환 코드 201(생 성)이 가능 합 니 다.
PUT:알려 진 자원 을 업데이트 합 니 다.예 를 들 어 고객 의 상세 한 정 보 를 업데이트 합 니 다.가능 한 리 턴 코드:200(OK)
DELETE:자원 을 삭제 하 는 데 사 용 됩 니 다.
프로젝트 구조
아래 화면 캡 처 는 우리 가 만 들 프로젝트 의 구 조 를 보 여 줍 니 다.
일부 세부 사항:
Spring Initializr 로 REST 서 비 스 를 만 드 는 것 은 식 은 죽 먹 기다.우 리 는 Spring Web MVC 를 우리 의 웹 계층 프레임 워 크 로 사용 할 것 이다.
Spring Initializr http://start.spring.io/ Spring Boot 프로젝트 를 만 들 도록 유도 하 는 좋 은 도구 입 니 다.
위의 그림 에서 보 듯 이 반드시 아래 절 차 를 집행 해 야 한다.
Spring Initializr 를 시작 하고 다음 내용 을 선택 하 십시오.
그룹 으로 com.in28minutes.springboot 을 선택 하 십시오.
student-seervices 를 Artifact 로 선택 하 십시오.
다음 의존 항목 선택
항목 을 Eclipse 로 가 져 옵 니 다.파일->가 져 오기->기 존 Maven 항목.
이 항목 의 모든 파일 을 알 고 싶다 면 계속 아래 에서 읽 을 수 있 습 니 다.
응용 업무 층 실현
모든 응용 프로그램 은 데이터 가 필요 합 니 다.우 리 는 실제 데이터베이스 와 상호작용 하 는 것 이 아니 라 ArrayList 라 는 메모리 데 이 터 를 사용 할 것 입 니 다.
한 학생 은 여러 과목 에 참가 할 수 있다.과정 에는 ID,이름,설명 과 완성 과정 이 필요 한 절차 목록 이 있 습 니 다.학생 들 은 신분증,이름,설명 과 그/그녀 가 현재 등록 하고 있 는 수업 목록 을 가지 고 있다.Student Service 는 다음 과 같은 공개 방법 을 제공 합 니 다.
public List retrieve AllStudents()-모든 학생 의 자세 한 정보 검색
public Student retrieveStudent(String studentId)-특정 학생 의 상세 정보 검색
public List retrieveCourses(String studentId)-학생 이 등록 한 모든 과정 검색
public Course retrieveCourse(String studentId,String courseId)-학생 이 등록 한 특정 과정의 상세 한 정 보 를 검색 합 니 다.
public Course addCourse(String studentId,Course course)-기 존 학생 에 게 과정 추가
다음 파일 을 참고 하여 서비스 류 Student Service 와 모델 류 Course 와 Student 를 구체 적 으로 실현 하 십시오.
Rest 서비스 Student Controller 는 get 서비스 몇 개 를 노출 시 켰 다.
package com.in28minutes.springboot.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.in28minutes.springboot.model.Course;
import com.in28minutes.springboot.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/students/{studentId}/courses")
public List<Course> retrieveCoursesForStudent(@PathVariable String studentId) {
return studentService.retrieveCourses(studentId);
}
@GetMapping("/students/{studentId}/courses/{courseId}")
public Course retrieveDetailsForCourse(@PathVariable String studentId,
@PathVariable String courseId) {
return studentService.retrieveCourse(studentId, courseId);
}
}
Postman 을 사용 하여 가 져 오기 서 비 스 를 실행 합 니 다.http:/localhost:8080/students/Student 1/course/Course 1 에 이 서 비 스 를 테스트 할 것 을 요청 합 니 다.아래 와 같이 대답 하 시 오.
{
"id": "Course1",
"name": "Spring",
"description": "10 Steps",
"steps": [
"Learn Maven",
"Import Project",
"First Example",
"Second Example"
]
}
아래 그림 은 우리 가 Postman 의 Get Service-내 가 가장 좋아 하 는 rest 서 비 스 를 실행 하 는 도 구 를 보 여 준다.POST Rest 서비스 추가
자원 생 성 에 성 공 했 을 때 POST 서 비 스 는 생 성 된 상태(201)를 되 돌려 야 합 니 다.
@PostMapping("/students/{studentId}/courses")
public ResponseEntity<Void> registerStudentForCourse(
@PathVariable String studentId, @RequestBody Course newCourse) {
Course course = studentService.addCourse(studentId, newCourse);
if (course == null)
return ResponseEntity.noContent().build();
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path(
"/{id}").buildAndExpand(course.getId()).toUri();
return ResponseEntity.created(location).build();
}
POST Rest 서비스 실행예시 요청 은 아래 와 같다.그것 은 학생 등록 과정의 모든 세부 사항 을 포함 하고 있다.
{
"name": "Microservices",
"description": "10 Steps",
"steps": [
"Learn How to Break Things Up",
"Automate the hell out of everything",
"Have fun"
]
}
다음 그림 은 우리 가 Postman 에서 Post 서 비 스 를 어떻게 수행 하 는 지 보 여 줍 니 다.-제 가 가장 좋아 하 는 rest 서 비 스 를 실행 하 는 도구 입 니 다.바디 옵션 에 가서 raw 를 선택 하 십시오.드 롭 다운 메뉴 에서 JSON 을 선택 하 십시오.위 요청 을 body 에 복사 합 니 다.우리 가 사용 하 는 URL 은 http:/localhost:8080/students/Student 1/courses 입 니 다.
완전한 코드 예시
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.in28minutes.springboot</groupId>
<artifactId>student-services</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>student-services</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
src/main/java/com/in28minutes/springboot/controller/StudentController.java
import java.net.URI;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import com.in28minutes.springboot.model.Course;
import com.in28minutes.springboot.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@GetMapping("/students/{studentId}/courses")
public List<Course> retrieveCoursesForStudent(@PathVariable String studentId) {
return studentService.retrieveCourses(studentId);
}
@GetMapping("/students/{studentId}/courses/{courseId}")
public Course retrieveDetailsForCourse(@PathVariable String studentId,
@PathVariable String courseId) {
return studentService.retrieveCourse(studentId, courseId);
}
@PostMapping("/students/{studentId}/courses")
public ResponseEntity<Void> registerStudentForCourse(
@PathVariable String studentId, @RequestBody Course newCourse) {
Course course = studentService.addCourse(studentId, newCourse);
if (course == null)
return ResponseEntity.noContent().build();
URI location = ServletUriComponentsBuilder.fromCurrentRequest().path(
"/{id}").buildAndExpand(course.getId()).toUri();
return ResponseEntity.created(location).build();
}
}
src/main/java/com/in28minutes/springboot/model/Course.java
import java.util.List;
public class Course {
private String id;
private String name;
private String description;
private List<String> steps;
// Needed by Caused by: com.fasterxml.jackson.databind.JsonMappingException:
// Can not construct instance of com.in28minutes.springboot.model.Course:
// no suitable constructor found, can not deserialize from Object value
// (missing default constructor or creator, or perhaps need to add/enable
// type information?)
public Course() {
}
public Course(String id, String name, String description, List<String> steps) {
super();
this.id = id;
this.name = name;
this.description = description;
this.steps = steps;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDescription() {
return description;
}
public String getName() {
return name;
}
public List<String> getSteps() {
return steps;
}
@Override
public String toString() {
return String.format(
"Course [id=%s, name=%s, description=%s, steps=%s]", id, name,
description, steps);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Course other = (Course) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}
src/main/java/com/in28minutes/springboot/model/Student.java
package com.in28minutes.springboot.model;
import java.util.List;
public class Student {
private String id;
private String name;
private String description;
private List<Course> courses;
public Student(String id, String name, String description,
List<Course> courses) {
super();
this.id = id;
this.name = name;
this.description = description;
this.courses = courses;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<Course> getCourses() {
return courses;
}
public void setCourses(List<Course> courses) {
this.courses = courses;
}
@Override
public String toString() {
return String.format(
"Student [id=%s, name=%s, description=%s, courses=%s]", id,
name, description, courses);
}
}
src/main/java/com/in28minutes/springboot/service/StudentService.java
package com.in28minutes.springboot.service;
import java.math.BigInteger;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Component;
import com.in28minutes.springboot.model.Course;
import com.in28minutes.springboot.model.Student;
@Component
public class StudentService {
private static List<Student> students = new ArrayList<>();
static {
//Initialize Data
Course course1 = new Course("Course1", "Spring", "10 Steps", Arrays
.asList("Learn Maven", "Import Project", "First Example",
"Second Example"));
Course course2 = new Course("Course2", "Spring MVC", "10 Examples",
Arrays.asList("Learn Maven", "Import Project", "First Example",
"Second Example"));
Course course3 = new Course("Course3", "Spring Boot", "6K Students",
Arrays.asList("Learn Maven", "Learn Spring",
"Learn Spring MVC", "First Example", "Second Example"));
Course course4 = new Course("Course4", "Maven",
"Most popular maven course on internet!", Arrays.asList(
"Pom.xml", "Build Life Cycle", "Parent POM",
"Importing into Eclipse"));
Student ranga = new Student("Student1", "Ranga Karanam",
"Hiker, Programmer and Architect", new ArrayList<>(Arrays
.asList(course1, course2, course3, course4)));
Student satish = new Student("Student2", "Satish T",
"Hiker, Programmer and Architect", new ArrayList<>(Arrays
.asList(course1, course2, course3, course4)));
students.add(ranga);
students.add(satish);
}
public List<Student> retrieveAllStudents() {
return students;
}
public Student retrieveStudent(String studentId) {
for (Student student : students) {
if (student.getId().equals(studentId)) {
return student;
}
}
return null;
}
public List<Course> retrieveCourses(String studentId) {
Student student = retrieveStudent(studentId);
if (student == null) {
return null;
}
return student.getCourses();
}
public Course retrieveCourse(String studentId, String courseId) {
Student student = retrieveStudent(studentId);
if (student == null) {
return null;
}
for (Course course : student.getCourses()) {
if (course.getId().equals(courseId)) {
return course;
}
}
return null;
}
private SecureRandom random = new SecureRandom();
public Course addCourse(String studentId, Course course) {
Student student = retrieveStudent(studentId);
if (student == null) {
return null;
}
String randomId = new BigInteger(130, random).toString(32);
course.setId(randomId);
student.getCourses().add(course);
return course;
}
}
src/main/java/com/in28minutes/springboot/StudentServicesApplication.java
package com.in28minutes.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class StudentServicesApplication {
public static void main(String[] args) {
SpringApplication.run(StudentServicesApplication.class, args);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.