티스토리 뷰
Spring HATEOAS
Hypermedia As The Engine Of Application State
서버
현재 리소스와 연관된 링크 정보를 클라이언트에게 제공한다.
클라이언트
연관된 링크 정보를 바탕으로 리소스에 접근한다.
연관된 링크 정보
Relation
Hypertext Reference
spring-boot-stater-hateoas 의존성 추가
https://docs.spring.io/spring-hateoas/docs/current/reference/html/
ObjectMapper 제공(stater-web이 제공해서 우리는 stater-hateoas를 추가하지 않아도 사용가능하다.)
spring.jackson.*
Jackson2ObjectMapperBuilder
LinkDiscovers 제공
클라이언트에서 링크 정보를 Rel 이름으로 찾을때 사용할 수 있는 XPath 확장 클래스
컨트롤러에서 Resource 추가로 Http Response Body에 링크 추가하기, 테스트 코드로 추가된 링크 검증 예제
Controller
org.springframework.hateoas.Resource 클래스를 이용해서 컨트롤러의 hello() 메소드에 link를 selfRel로 등록한다.
package io.namjune.springbootconceptandutilization.controller;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
import io.namjune.springbootconceptandutilization.Hello;
import org.springframework.hateoas.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
public class SampleController {
("/hello")
public Resource<Hello> hello() {
Hello hello = new Hello();
hello.setPrefix("Hey,");
hello.setName("NJ");
Resource<Hello> helloResource = new Resource<>(hello);
helloResource.add(linkTo(methodOn(SampleController.class).hello()).withSelfRel());
return helloResource;
}
}ControllerTest
package io.namjune.springbootconceptandutilization.controller;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
(SpringRunner.class)
(SampleController.class)
public class SampleControllerTest {
MockMvc mockMvc;
public void hello() throws Exception {
mockMvc.perform(get("/hello"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$._links.self").exists());
}
}결과
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {Content-Type=[application/hal+json;charset=UTF-8]}
Content type = application/hal+json;charset=UTF-8
Body = {"prefix":"Hey,","name":"NJ","_links":{"self":{"href":"http://localhost/hello"}}}
Forwarded URL = null
Redirected URL = null
Cookies = []
'ICT Eng > Spring' 카테고리의 다른 글
[Spring Boot] Spring Security 자동 설정과 커스터마이징 (0) | 2019.07.05 |
---|---|
[Spring Boot] Spring MVC CORS 활용, ajax로 검증 (0) | 2019.01.25 |
[Spring Boot] 템플릿 엔진, HtmlUnit, ExceptionHandler (0) | 2019.01.24 |
[Spring Boot] webjars, index 페이지, 파비콘 활용 (2) | 2019.01.17 |
[Spring Boot] 정적 리소스 지원(static resources) (0) | 2019.01.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 정렬
- AWS
- 알고리즘
- IT융합인력양성사업단
- 시간복잡도
- Wisoft
- 한밭이글스
- 순환
- github
- vuejs
- Algorithm
- 레드블랙트리
- Spring
- ORM
- springboot
- 인프런
- vuex
- JPA
- Recursion
- 젠킨스
- RBT
- 한밭대학교
- Raspberry Pi
- Java
- 자바
- Spring Boot
- 스프링부트
- 라즈베리파이
- Vue.js
- 무선통신소프트웨어연구실
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함