Spring

API - GET, POST(ARC 테스트)

코린이 연대기 2020. 11. 17. 18:18

@GetMapping("주소") 를 적어  url에 "주소" 값을 입력하여 받아오는  방식이다.(조회)

package com.sparta.week02_hwk.controller;

import com.sparta.week02_hwk.domain.Course;
import com.sparta.week02_hwk.domain.CourseRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RequiredArgsConstructor//lombok//final 변수 포함하는 생성자 자동생성
@RestController//Json 형식으로 반환
public class CourseController {

    private final CourseRepository courseRepository;

    @GetMapping("/api/courses")
    public List<Course> getCourses() {
        return courseRepository.findAll();
    }
}

 

ARC (Advenced REST Client) 출력

------------

@PostMapping//생성

Controller를 수정해주면 new Couuse(requestDto) 의 requestDto에 빨간줄이 생긴다.

에러메시지 com.sparta.week02_hwk.domain.CourseRequestDto)'

Course에 CourseRequestDto를 파라미터로 갖는 생성자가 없다! 그럼 만들어주자

public class CourseController {

    private final CourseRepository courseRepository;

    private final CourseService courseService;

    // PostMapping을 통해서, 같은 주소라도 방식이 다름을 구분합니다.
    @PostMapping("/api/courses")//생성
    public Course createCourse(@RequestBody CourseRequestDto requestDto) {
    	// RequestBody 는 API에서 데이터를 잘 주고받으려면 필요하다. RestCon@RestController
        // requestDto 는, 생성 요청을 의미합니다.
        // 강의 정보를 만들기 위해서는 강의 제목과 튜터 이름이 필요하잖아요?
        // 그 정보를 가져오는 녀석입니다.

        // 저장하는 것은 Dto가 아니라 Course이니, Dto의 정보를 course에 담아야 합니다.
        // 잠시 뒤 새로운 생성자를 만듭니다.
        Course course = new Course(requestDto);

        // JPA를 이용하여 DB에 저장하고, 그 결과를 반환합니다.
        return courseRepository.save(course);
    }

    @GetMapping("/api/courses")//조회
    public List<Course> getCourses() {
        return courseRepository.findAll();
    }
}

 

Course.java 에 아래와 같은 생성자를 추가해준다. 그럼 위의 에러 메시지가 없어진다./ 서버스타트!

    public Course(CourseRequestDto requestDto){
        this.title = requestDto.getTitle();
        this.name = requestDto.getName();
    }

 

이제 ARC로 테스트 해보면? 이런 에러메시지가 나온다...!

 

Get방식은 url에 매핑된 그대로 받아오는 반면 Post 방식은 받아오는 방법이 엄격히 정해져있다. (자세한건 다음주차)

우선 받아오는 방식을 살펴보자 그중 우린 json이라는 가장 보편화 된 타입으로 데이터를 보내보자

HEADERS 에서 +버튼을 눌러 Content-Type은 json형식이라고 명시해주고

BODY에서도 json으로 타입을 명시해주고 Post로 보낼 내용을 하단에 작성해주자

 

그 상태에서 SEND 해주면 id 값이 2로 방금 보낸 값이 들어간다. 다시 메소드를 GET으로 바꿔 들어온 값을 확인해 보자 

 

POST로 보낸 값이 추가된 데이터 전체를 볼 수있다!