6.1 Rest Controller 작성
@Controller | @restController |
다중 페이지 어플리케이션 MPA에 사용 |
클래스 내부에 있는 모든 요청 처리 메서드에 @ResponseBody를 지정하지 않아도 된다. |
CRUD로 작성
1. get 데이터 조회
@RequestMapping(path="/design")
1) 데이터 가져오기
ex) localhost:8080/design/recent
2) 아이디로 데이터 가져오기
ex) localhost:8080/design/{id}
@GetMapping("/{id}")
2. post 데이터 전송, 입력
httpClient.post('http://localhost:8080/design', 보낼 데이터, 헤더).subscribe(taco => this.cart.addToCart(taco));
@PostMapping
3. put, patch 데이터 변경
@PutMapping("/{orderId}") : 전체
@PatchMapping(path="/{orderId}") : 일부
6.2 하이퍼미디어
HATEOAS = JSON 응답에 하이퍼링크를 포함했다!
1. 하이퍼링크 추가하기
하이퍼링크 만드는 법?
HATEOAS 를 pom.xml에 추가하라
resource : 단일
resources : 컬렉션
1.1 하드코딩으로 하이퍼링크 생성 방법
Resources<Resource<Taco>> recentResources = Resources.wrap(tacos); // Resources 객체 생성
recentResources.add( new Link("주소", "recents") ); // 하이퍼링크 추가하기
1.2 HATEOAS 링크 빌더 -> controllerLinkBuilder -> 자동으로 하이퍼링크 빌드를 도와줌
Resources<resource> </resourcerecentResources = Resources.wrap(tacos); // Resources 객체 생성
recentResources.add(controllerLinkBuilder.linkTo(DesignTacoController.class) // /design
.slash("recent") // 슬래시와 인자로 전달되는 값을 url에 추가한다 /recent
.withRel("recents")
);
2. 리소스 어셈블러 생성하기
도메인 데이터, 하이퍼링크 => TacoResource
TacoResourceAssembler
@Override
instantiateResource(Taco taco) // 전달된 taco 인스턴스 생성
@Override
toResource(Taco taco)// taco 객체의 id 속성으로 하이퍼링크가 자동 생성!
Resources<resource> recentResources = Resources.wrap(tacos); // Resources 객체 생성
에서
List<TacoResource> tacoResources = new TacoResourceAssembler().toResources(tacos);
Resources<TacoResource> recentResources = new Resources<TacoResource>(tacoResources);
6.3 데이터 기반 서비스 활성화하기
앞은
repository를 자동으로 생성, 필요한 기능을 수행한다.
스프링 데이터가 생성하는 repository의 REST API를 자동 생성한다.
스프링 데이터 REST
1. 의존성 추가
효과!
REST API를 노출 시킬 수 있다.
스프링 데이터 JPA,
스프링 데이터 몽고
REST API가 자동 생성될 수 있도록 스프링 데이터 REST가 자동-구성 된다.
@RestController 어노테이션 을 제거
자동으로 만들어주네?!
해야하는 것
API의 기본 경로 설정
1) 다른 컨트롤러와 충돌 하지 않게 하기 위함
spring.data.rest.base-path 속성에 설정한다.
/api
기본 경로로 /api로 설정함.
6.3.1복수형 이름 tacos를 쓰고싶어?
그럼 @RestResource(rel="tacos", path="tacos") 쓰면됨
6.3.2 페이징, 정렬
요청: 파라미터로 사용
ex) localhost:8080/api/tacos?size=5&page=1
6.3.3 커스텀 엔드포인트 추가
고려할점:
1. 기본경로를 알아서 포함해줘라
그러나 기본경로가 변경될때 controller의 매핑이 일치되도록 수정되야함
2. 컨트롤러에 정의한 엔드포인트는
스프링 데이터 REST 엔드포인트에서 반환되는 리소스의 하이퍼링크에 자동으로 포함 안됨. ㅠㅠ
1. 기본 경로를 controller에 적용하기
@RepositoryRestController 입력하면됨!
그러면 스프링 데이터 REST의 기본 경본 경로가 추가된다.
따라서 /tacos/recent 는
/api/tacos/recent로 작동한다
6.3.4. 커스텀 하이퍼링크를 엔드포인트에 추가하기
'java > 스프링인액션' 카테고리의 다른 글
8. 비동기 메시지 전송 (0) | 2021.12.05 |
---|---|
[8.3] 카프카 사용하기 (0) | 2021.12.04 |
[6.3] (0) | 2021.11.27 |
챕터4 스프링 시큐리티 (0) | 2021.11.20 |
[챕터 3] 데이터로 작업하기 72~112p (0) | 2021.11.13 |