본문 바로가기

java/스프링인액션

[6.3] 스프링 데이터 REST

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 노출시킬 수 있다.

효과!

REST API를 노출 시킬 수 있다.

스프링 데이터 JPA,

스프링 데이터 몽고

REST API가 자동 생성될 수 있도록 스프링 데이터 REST가 자동-구성 된다.

 

@RestController 어노테이션 을 제거

 

 

자동으로 만들어주네?!

 

해야하는 것

API의 기본 경로 설정

1) 다른 컨트롤러와 충돌 하지 않게 하기 위함

 

 

spring.data.rest.base-path 속성에 설정한다.

 

/api

기본 경로로 /api로 설정함.

spring.data.rest.base-path 속성에&amp;nbsp;기본 경로로 /api로 설정
이거 왜 작용 안할까?
엔드포인트는 복수형으로! 이름이 된다 taco -&amp;gt; tacos(x) , tacoes(o)
데이터 불러옴

 

 

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