Rest API를 구현 하다 보면 사용자로 부터 요청왔을때 특정값을 포함한 uri를 전달해야 하는 상황이 발생할 수 있다.
이떄 사용하는 것이 ServletUriComponentsBuilder이다. ServletUriComponentsBuilder를 통해 적절한 URI를 만들고 요청한 사용자에게 특정값을 포함한 URI를 전달 할 수 있다.
ServletUriComponentsBuilder
아래의 방식은 파일업로드 후 파일다운로드 경로를 사용자에게 보내주고자 할 때 자주 사용되는 방법입니다. 지금은 간단한 예제를 만들겠습니다.
TestController
ServletUriComponentsBuilder.fromCurrentRequest()를 통해 사용자가 요청한 Uri를 가져온 다음 path를 통해 원하는 정보를 입력합니다. buildAndExpand에 내가 원하는 값을 넣어 주면 path({변수})에 추가되어 URI가 구성됩니다. 다음 ResponseEntiy를 통해 사용자에게 전달합니다.
@RestController
public class TestController {
//Jpa 담당
@Autowired
TestRepo repo;
@GetMapping("/user")
public ResponseEntity<User> user(){
URI uri = ServletUriComponentsBuilder.fromCurrentRequest() //사용자 요청 uri
.path("/{uid}") //buildAndExpand를 통해 얻은 값이 들어옴
.path("/cat") //추가 정보
.buildAndExpand(repo.save(User.builder().uid("pooney").password("안녕").build()).getUid())// {uid} 넣어줄 값
.toUri(); //uri 생성
return ResponseEntity.created(uri).build();
}
결과
http://localhost:9001/user 를 요청 후 Response Headers의 location 부분을 보면 controller에서 만든 uri가 전달 된것을 확인 할 수 있습니다.
PostMan으로 요청 할 결과를 보시면 Status코드가 201 Created인 것을 확인 할 수 있습니다. 이를 통하여 적절한 Rest API를 만들 수 있습니다.
'Spring boot' 카테고리의 다른 글
Spring boot AOP를 이용한 Exception Handling (0) | 2020.07.05 |
---|---|
Spring boot API 요청 시 Status 변경 (0) | 2020.07.05 |
Spring boot DispacherServlet이란? (0) | 2020.07.05 |
Spring boot Lombok 활성화 (0) | 2020.07.05 |
Springboot Junit 사용시 @TestPropertySource 에러 (0) | 2020.06.22 |