지금까지 우리는 REST API를 따르며 URL을 구현했습니다. 이때 중요한점 중에 하나는 정확한 응답 상태를 반환하는 것입니다.
예를 들어 입력한 리소스가 존재하지 않았을 때는 응답코드 404를 반환하는 것처럼 말입니다.

REST API에 대한 내용은 아래 블로그에 정리되어있습니다.
UserResource 수정하기(응답코드 반환)
package study.rest.webservices.restfulwebservices.user;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class UserResource {
private UserDaoService service;
public UserResource(UserDaoService service) {
this.service = service;
}
//GET /users
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
//GET /users/{id}
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
return service.findOne(id);
}
//POST /users
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
service.save(user);
return ResponseEntity.created(null).build();
}
}
요청이 제대로 수행되면 201이라고는 코드를 반환합니다.
여기에 더해서 어떤 사용자가 생성됐는지 알려줄 순 없을까요?
예를들어, 생성된 사용자가 user4라면 /users/4라고 말입니다.
URI를 반환하기 위해 UserResource를 수정하겠습니다.
createUser 수정package study.rest.webservices.restfulwebservices.user;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import java.net.URI;
import java.util.List;
@RestController
public class UserResource {
private UserDaoService service;
public UserResource(UserDaoService service) {
this.service = service;
}
//GET /users
@GetMapping("/users")
public List<User> retrieveAllUsers() {
return service.findAll();
}
//GET /users/{id}
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
return service.findOne(id);
}
//POST /users
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = service.save(user);
// users/4 => users/{id}, user.getID
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
}
createUser의 반환에서 created는 파라미터로 location을 받을 수 있습니다. 여기에 location을 생성해서 넣어주겠습니다.
// 현재 요청 URI에 Path를 붙여줍니다. {id}에 들어갈 데이터를 바인딩하고 uri로 변환합니다.
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();

성공적으로 데이터가 생성되었고 location도 잘 반환되었습니다.