HATEOAS : Hypermedia As The Engine Of Applicaion State
현재 리소스와 연관된 (호출 가능한) 자원 상태 정보를 제공
-pom.xml에 dependency 추가
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0
Spring 버전에 따라서 구현 방식이 다른데
2.1.8 버전
Resource
ControllerLinkBuilder
2.2 버전 이상
Resource -> EntityModel
ControllerLinkBuilder -> WebMvcLinkBuilder
구현 코드는 다음과 같다.
Filtering을 적용시켜주기 위해서 MappingJacksonValue로 반환
public MappingJacksonValue retrieveUser(@PathVariable int id){
User user = service.findOne(id);
if(user==null){// 존재하지 않을경우 Exception 발생
throw new UserNotFoundException
(String.format("ID: [%s] NOT FOUND!",id));
}
// retrieveAllUsers 메소드와 연결("all-users")
EntityModel<User> model = EntityModel.of(user);
WebMvcLinkBuilder linkTo = WebMvcLinkBuilder
.linkTo(WebMvcLinkBuilder.methodOn(this.getClass())
.retrieveAllUsers());
model.add(linkTo.withRel("all-users"));
// filter 적용
SimpleBeanPropertyFilter filter=SimpleBeanPropertyFilter
.filterOutAllExcept("id","name","joinDate");//필터
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("UserInfo",filter);
MappingJacksonValue mapping = new MappingJacksonValue(model);
mapping.setFilters(filterProvider);
return mapping;
}
결과 화면
필터링, linkTo가 적용된 것을 볼 수 있다.
Swagger 클래스
3.x.x 버전은 이렇게 접근
http://localhost:8088/swagger-ui/index.html
http://localhost:8088/v2/api-docs
이전 버전
http://localhost:8088/swagger-ui.html
@Configuration
@EnableSwagger2
public class SwaggerConfig{
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2);
}
}
http://localhost:8088/v2/api-docs 화면
http://localhost:8088/swagger-ui/index.html 화면