spring boot rest 예 를 자세히 설명 합 니 다.

21787 단어 springbootrest
소개:본 고 는 Spring Boot 를 사용 하여 간단 한 REST 서 비 스 를 만 드 는 데 도움 을 줄 것 입 니 다.
뭐 공부 해요?
  • REST 서 비 스 는 무엇 입 니까?
  • Spring Initializr 를 사용 하여 Rest 서비스 응용 프로그램 을 만 들 도록 유도 합 니까?
  • 어떻게 REST 서 비 스 를 받 아 학생 들 이 등록 한 과정 을 검색 합 니까?
  • 어떻게 학생 등록 과정 에 Post REST 서 비 스 를 만 듭 니까?
  • 어떻게 postman 을 이용 하여 rest 서 비 스 를 수행 합 니까?
  • 본 튜 토리 얼 에서 사용 하 는 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 요청 을 보 내 학생 들 에 게 과정 을 등록 할 수 있 습 니 다.
    필요 한 도구
  • Maven 3.0+구축 도구
  • 당신 이 가장 좋아 하 는 IDE.우 리 는 Eclipse 를 사용한다.
  • JDK 1.8+
  •  완전한 spring booot rest Maven 프로젝트 코드 예시
    우리 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 의 다섯 가지 중요 한 조건:
  • 클 라 이언 트-서버:서비스 생산자 와 서비스 사용자 가 있어 야 합 니 다.
  • 인터페이스(URL)는 통일 되 고 자원 을 노출 합 니 다.
  • 이 서 비 스 는 무상 태 입 니 다.
  • 서비스 결 과 는 캐 시 가능 할 것 입 니 다.예 를 들 어 HTTP 캐 시.
  • 서 비 스 는 계층 구 조 를 사용 해 야 한다.클 라 이언 트 가 서버 에 직접 연결 해 서 는 안 됩 니 다.-중간 층 에서 정보-캐 시 를 가 져 올 수 있 습 니 다.
  •  리 차드 슨 성숙 도 모델
    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:자원 을 삭제 하 는 데 사 용 됩 니 다.
    프로젝트 구조
    아래 화면 캡 처 는 우리 가 만 들 프로젝트 의 구 조 를 보 여 줍 니 다.

    일부 세부 사항:
  • Student Controller.자바-rest 컨트롤 러 는 위 에서 논의 한 모든 세 가지 서비스 방법 을 제공 합 니 다.
  •  Course.java,Student.java,Student Service.java-응용 프로그램의 업무 논리.Student Service 는 Rest 컨트롤 러 에서 소모 하 는 방법 을 제공 합 니 다.
  • Student Controller IT.자바-rest 서비스의 통합 테스트.
  • Student Controller Test.java-test 서비스의 단원 테스트.
  • Student Services Application.java-Spring Boot 응용 프로그램의 시작 기 입 니 다.이 프로그램 을 실행 하려 면 이 파일 을 자바 프로그램 으로 시작 해 야 합 니 다.
  • pom.xml-이 프로젝트 를 구축 하 는 데 필요 한 모든 의존 도 를 포함 합 니 다.우 리 는 Spring Boot Starter Web 을 사용 할 것 이다.
  • Spring Initializr 를 사용 하여 REST 서 비 스 를 만 들 도록 유도 합 니 다.
    Spring Initializr 로 REST 서 비 스 를 만 드 는 것 은 식 은 죽 먹 기다.우 리 는 Spring Web MVC 를 우리 의 웹 계층 프레임 워 크 로 사용 할 것 이다.
    Spring Initializr http://start.spring.io/ Spring Boot 프로젝트 를 만 들 도록 유도 하 는 좋 은 도구 입 니 다.

    위의 그림 에서 보 듯 이 반드시 아래 절 차 를 집행 해 야 한다.
    Spring Initializr 를 시작 하고 다음 내용 을 선택 하 십시오.
    그룹 으로 com.in28minutes.springboot 을 선택 하 십시오.
    student-seervices 를 Artifact 로 선택 하 십시오.
    다음 의존 항목 선택
  •  Web
  • Actuator
  • DevTools
  • 클릭 하여 항목 생 성.
    항목 을 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 를 구체 적 으로 실현 하 십시오.
  • src/main/java/com/in28minutes/springboot/model/Course.java
  • src/main/java/com/in28minutes/springboot/model/Student.java
  • src/main/java/com/in28minutes/springboot/service/StudentService.java
  • GET Rest 서비스 몇 개 추가
    Rest 서비스 Student Controller 는 get 서비스 몇 개 를 노출 시 켰 다.
  • @Autowired private Student Service student Service:저 희 는 Spring Autowiring 을 사용 하여 학생 서 비 스 를 Student Controller 에 자동 으로 주입 합 니 다.
  • @GetMapping("/students/{studentId}/courses"):studentId 를 경로 변수 로 공개 획득 서비스
  •  @GetMapping("/students/{student Id}/courses/{courseId}"):학생 들 의 특정 과정 을 검색 하기 위해 서 비 스 를 공개 적 으로 가 져 옵 니 다.
  • @PathVariable String studentId:uri 에서 온 studentId 의 값 은 이 매개 변 수 를 반영 합 니 다.
  • 
    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"):POST 에 맵 을 요청 합 니 다 URL
  • @RequestBody Course newCourse:귀속 을 사용 하면 요청 본문 을 과정 대상 에 귀속 시 킵 니 다.
  • ResponseEntity.created(location).build():만 든 상 태 를 되 돌려 줍 니 다.자원 을 만 드 는 위 치 를 응답 제목 으로 되 돌려 줍 니 다.
  • 
    @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);
    	}
    }
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기