보뇨 다이어리

RestAPI POST 시 return 값에 대해서 본문

컴퓨터 관련/Java 정보

RestAPI POST 시 return 값에 대해서

보뇨 2019. 6. 28. 09:40
반응형

현재 내가 다니고 있는 회사에서는 post 시 return 값으로 이런식으로 보내준다

{
  "id" : 230
}

근데 굳이 RequestBody 에 넣어야하나 싶기도하고 솔직히 옳고 그름은 없지만 좀더 쿨한 모습이 뭘까 생각하다가 문득 넷플릭스는 어떻게 했을까 궁금해서 찾아보았다 거기는 이런식으로 되어있었다

HTTP/1.1 201 Created
Location: https://genie.example.com/api/v3/applications/07d38b08-91f1-47e9-8629-29e42a6e2b8a

Location 저거는 json 으로 뿌려주는건가싶어서 찾아봤는데 그건아니였다 http header 에 Location 필드 초기화 시키는것이였다!! 그래서 오우야 어차피 날아가는 http header 에 넣다니!! 완전 쿠우우울하군! 해서 어떻게 하는지 찾아보았다
바로 아래 첫번째꺼는 구버전 스프링에서 해당한다 즉 현재 내 스프링이 2.x 버전이기때문에 첫번째꺼를 썼고 그외 신버전을 쓰고있는경우 2번째꺼를 해봤다

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> createCustomer(UriComponentsBuilder b) {

    UriComponents uriComponents = 
        b.path("/customers/{id}").buildAndExpand(id);

    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(uriComponents.toUri());
    return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<?> createCustomer(UriComponentsBuilder b) {

    UriComponents uriComponents = 
        b.path("/customers/{id}").buildAndExpand(id);

    return ResponseEntity.created(uriComponents.toUri()).build();
}

이렇게 하게 되면 postman 으로 실행시 리턴값으로는 맨위에 썼던 http 201 형식으로 오게되고 Location 필드에 값이 초기화되어있는것을 확인할수있다.


출처

https://stackoverflow.com/questions/3318912/what-is-the-preferred-way-to-specify-an-http-location-response-header-in-sprin

반응형