Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

helloworld

PUT 본문

restful

PUT

hellojava 2023. 8. 13. 17:01

httpmethod의 기능중 마지막 기능일것 같다

put은 데이터베이스내에서의 update기능과 같다.

 

강의 챕터가 끝나면서 과제로 putMapping을 하라고 하셨다.

 

우선 

 

private static List<User> users = new ArrayList<>();

static {
users.add(new User(1, "Song", new Date()));
users.add(new User(2, "Woo", new Date()));
users.add(new User(3, "ChimChakMan", new Date()));
}

list로 간단하게 코드예제를 만들면서 하고 있었기 때문에 이런 코드가 있다.

 

우선 유저목록의 id값을 가변변수로 받고 

 

id값을 user 객체에 set 한 뒤 수정을 하려 했었다.

 

@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@RequestBody User user,@PathVariable int id) {
user.setId(id);
User user1 = service.updateUser(user);
if (user == null) {
throw new RuntimeException(String.format("ID[$s] not found", id));
}

URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("{id}")
.buildAndExpand(user1)
.toUri();
return ResponseEntity.created(location).build();
}

 

*참고 : if문은 id가 존재하지 않을때에 예외처리하는 코드이고 uri는 http 상태코드를 바꾼 코드이다.

아 근데 예외처리가 안되네 아 ㅋㅋ 다시 해봐야지

 

뭐 아무튼 

 

public User updateUser(User user) {
for (User user1 : users) {
if (user.getId() == user1.getId()) {
user1.setId(user.getId());
user1.setName(user.getName());
user1.setJoinDate(user.getJoinDate());
}
}
return user;
}

이런식으로 업데이트를 하려 했는데 이건 아닌가보다 .. 왜냐면 

 

http://localhost:9090/users/5User(id=1,%20name=new,%20joinDate=Sun%20Aug

%2013%2016:50:15%20KST%202023)

 

headers에  확인을 해보니 이런식으로 쿼리스트링식으로 넘어간다 .. 

 

다시 찾아보자 아자아자 홧팅

 

-----------------------------------------------------

 

제대로 된 해결법인지는 의문이지만 해결 된거같다..

 

@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@RequestBody User user,@PathVariable int id) {

User updateUser = service.updateUser(user,id);
if (user.getId() != id) {
throw new UserNotFoundException(String.format("ID[%s] not found", id));
}


URI location = ServletUriComponentsBuilder.fromCurrentRequest()
// .path("/{id}")
.buildAndExpand(updateUser.getId())
.toUri();
System.out.println(location);
return ResponseEntity.created(location).build();
}

우선 에러코드가 나지 않았던 이유는 역시 조건을 바보같이 걸었다..  수정할 id값과 요청시 들어가있는 id값을 비교해서 같지 않으면 에러코드를 나오게 하였다.

 

uri가 이상하게 나왔던 이유는 buildAndExpand였다. 우선 이미 엔드포인트가 users/{id}인데 그 위에 user를 넣으려 하니, users/2/~~~~~나왔던것이었다. 심지어 id값을 빼지도 않고 그냥 user를 박았었으니.. 

 

path를 주석처리하고 expand하여 id값을 집어 넣었더니 잘 됐다 

 

 

 

만약 없는 번호를 넣거나 수정하려 할때에는 404 notFound 에러가 나온다

 

'restful' 카테고리의 다른 글

JSON 형태의 데이터를 xml 데이터로 변환하기  (0) 2023.08.13
유효성 검사 (Validatation)  (0) 2023.08.13
DELETE 기능  (0) 2023.08.13
Exception 처리 심화과정 ..  (0) 2023.08.13
Exception 처리  (0) 2023.08.13