SPRING/스프링부트 개념과 활용

[스프링부트 개념과 활용] HATEOAS

JUMP개발자 2021. 1. 3. 23:27

 

jump-developer.tistory.com/49?category=868499

HATEOAS란 ?

Hypermedia as the Engine of Application State의 약자이다.

 

HATEOAS는 Rest APi를 만들 때 사용이 되고, 서버가 클라이언트에게 리소스에 대한 정보를 제공할 때 연관되어 있는 링크 정보들까지 같이 제공하는 역할을 한다.

 

사용되는 의존성

pom.xml에 아래와 같이 추가해준다.

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

 

@RestController
public class HateoasController {

    @GetMapping("/hello")
    public EntityModel<Hello> hello() {
        Hello hello = new Hello();
        hello.setPrefix("hey, ");
        hello.setName("jump");

        EntityModel<Hello> helloEntityModel = new EntityModel<>(hello);
        helloEntityModel.add(linkTo(methodOn(HateoasController.class).hello()).withSelfRel());

        return helloEntityModel;
    }
}

-> HateoasController에서 제공하는 hello라는 메서드에 대한 링크를 따서 이 링크를 Self라는 릴레이션을 만들어서 추가함.

 

@RunWith(SpringRunner.class)
@WebMvcTest(HateoasController.class)
public class HateoasControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void hello() throws Exception {
        mockMvc.perform(get("/hello"))
                .andDo(print())
                .andExpect(status().isOk())
                .andExpect(jsonPath("$._links.self").exists());
    }

}

-> Hello라는 객체가 json으로 변환이 되어서 응답을 return한다.

public class Hello {

    private String prefix;

    private String name;

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

TEST 결과