-
host주소 = http://localhost:8080
-
요청과 응답
- 요청 Type 공통 = application/json
- 응답 Type 공통 = application/json
- 전체영화 가져오기
- GET /movie
- 응답 BODY 데이터 (Movie 오브젝트를 컬렉션에 담아 json으로 변환하여 응답)
- 영화 1건 가져오기(숫자로 구분 = 숫자는 영화의 id값)
- Get /movie/8
- 응답 BODY 데이터 (Movie 오브젝트를 json으로 변환하여 응답)
- 영화 등록하기
- POST /movie
- 요청 BODY 데이터 (title, rating)
- 응답 BODY 데이터 성공시 (statusCode = 200, msg = “ok”)
- 응답 BODY 데이터 실패시 (statusCode = 500, msg = “fail”)
- 영화 삭제하기
- DELETE /movie/8
- 응답 BODY 데이터 성공시 (statusCode = 200, msg = “ok”)
- 응답 BODY 데이터 실패시 (statusCode = 500, msg = “fail”)
- 영화 수정하기
- PUT /movie/7
- BODY 데이터 (title, rating)
- 응답 BODY 데이터 성공시 (statusCode = 200, msg = “ok”)
- 응답 BODY 데이터 실패시 (statusCode = 500, msg = “fail”)
- windows10
- sts
- jdk 1.8
- Postman
package com.cos.movie.domain;
import java.sql.Timestamp;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Movie {
private int id;
private double rating;
private String title;
private Timestamp makeDate;
}
package com.cos.movie.domain;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
// 더미데이터 넣기
@Repository
public class MovieRepository {
//전체 영화 가져오기
public List<Movie> findAll(){
List<Movie> movies = new ArrayList<>();
movies.add(new Movie(1,9.1,"소울",null));
movies.add(new Movie(2,5.8,"극장판 귀멸의 칼날 무한열차편",null));
movies.add(new Movie(3,8.4,"아이엠 우먼",null));
movies.add(new Movie(4,10.0,"파힘",null));
movies.add(new Movie(5,7.1,"더 시크릿",null));
movies.add(new Movie(6,8.3,"모추어리 컬렉션",null));
movies.add(new Movie(7,6.8,"테넷",null));
movies.add(new Movie(8,8.9,"마이 미씽 발렌타인",null));
return movies;
}
//영화 1건 가져오기
public Movie findById(int id){ //영화 한건 가져오기
System.out.println(id+"번 영화 select");
return new Movie(id,9.1,"소울",null);
}
//영화 등록하기
public Movie save(JoinReqDto dto) {
if(dto.getTitle()!=null) {
System.out.println("영화 제목 : "+dto.getTitle()+"가 추가되었습니다.");
return new Movie(9,dto.getRating(),dto.getTitle(),null);
}
return null;
}
// 영화 삭제하기
public void delete(int id) {
System.out.println("id: "+id+"번 영화 삭제하기");
}
//영화 수정하기
public Movie update(int id, UpdateReqDto dto) {
System.out.println(id+"번 영화 :"+dto.getTitle()+"평점:"+dto.getRating()+"\n 수정 하기");
return new Movie(id,dto.getRating(),dto.getTitle(),null);
}
}
package com.cos.movie.domain;
import lombok.Data;
@Data
public class CommonDto<T> {
private int statusCode;
private T data;
public CommonDto(int statusCode) {
super();
this.statusCode = statusCode;
}
public CommonDto(int statusCode,T data) {
super();
this.statusCode = statusCode;
this.data = data;
}
}
package com.cos.movie.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
public class JoinReqDto {
@NotNull(message = "fail")
@NotBlank(message = "fail")
private String title;
@NotNull(message = "fail")
private double rating;
}
package com.cos.movie.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Data;
@Data
public class UpdateReqDto {
@NotNull(message = "fail")
@NotBlank(message = "fail")
private String title;
@NotNull(message = "fail")
private double rating;
}
package com.cos.movie.web;
import java.util.List;
import javax.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.cos.movie.domain.CommonDto;
import com.cos.movie.domain.JoinReqDto;
import com.cos.movie.domain.Movie;
import com.cos.movie.domain.MovieRepository;
import com.cos.movie.domain.UpdateReqDto;
@RestController
public class MovieController {
private MovieRepository movieRepository;
public MovieController(MovieRepository movieRepository) {
this.movieRepository=movieRepository;
}
//http://localhost:8080/movie
@GetMapping("/movie")
public CommonDto<List<Movie>> findAll(){
System.out.println("모든 영화 찾기");
return new CommonDto<>(HttpStatus.OK.value(), movieRepository.findAll());
// MessageConverter (JavaObject -> Json String)
}
}
//http://localhost:8080/movie/1
@GetMapping("/movie/{id}")
public CommonDto<Movie> findById(@PathVariable int id){
System.out.println(id+"번 영화");
return new CommonDto<>(HttpStatus.OK.value(),movieRepository.findById(id));
}
@CrossOrigin
@PostMapping("/movie")
public CommonDto<String> save(@Valid @RequestBody JoinReqDto dto, BindingResult bindingResult){
System.out.println("영화 등록하기");
System.out.println("movie :"+dto);
movieRepository.save(dto);
if(dto.getTitle().equals("")||dto.getTitle().equals(null)) {
return new CommonDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(),"fail");
}//영화 등록 시 제목 데이터값이 없으면 BODY데이터 실패로 간주
return new CommonDto<>(HttpStatus.OK.value(),"ok");
}
//http://localhost:8080/movie/1
@DeleteMapping("/movie/{id}")
public CommonDto delete(@PathVariable int id) {
System.out.println("영화 삭제하기");
movieRepository.delete(id);
if(id>100 || id<0) {
return new CommonDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(),"fail");
}//id값이 음수이거나 100이상이면 데이터 실패로 간주
return new CommonDto<>(HttpStatus.OK.value(),"ok");
}
@PutMapping("/movie/{id}")
public CommonDto update(@PathVariable int id,@Valid @RequestBody UpdateReqDto dto, BindingResult bindingResult) {
System.out.println("영화 수정하기");
System.out.println("movie :"+dto);
movieRepository.update(id, dto);
if(dto.getTitle().equals("")||dto.getTitle().equals(null)) { //제목데이터값이 없으면 BODY데이터 실패로 간주
return new CommonDto<>(HttpStatus.INTERNAL_SERVER_ERROR.value(),"fail");
}
return new CommonDto<>(HttpStatus.OK.value(),"ok");
}