[Spring MVC] controller handlerMethod ์ค์ต
Categories: Spring
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
ํธ๋ค๋ฌ๋ฉ์๋ ๊ตฌํ
MemberController ํธ๋ค๋ฌ ๋ฉ์๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/v1/members")
public class MemberController {
private final Map<Long, Map<String, Object>> members = new HashMap<>();
@PostConstruct
public void init() {
Map<String, Object> member1 = new HashMap<>();
long memberId = 1L;
member1.put("memberId", memberId);
member1.put("email", "hgd@gmail.com");
member1.put("name", "ํ๊ธธ๋");
member1.put("phone", "010-1234-5678");
members.put(memberId, member1);
}
-
ํ์์ ๋ณด ์์ ์ ์ํ ํธ๋ค๋ฌ ๋ฉ์๋ ๊ตฌํ
1) ์ฒ์ ์์ฑ ์ฝ๋
1 2 3 4 5 6 7 8 9 10
@PatchMapping("/{member-id}") public ResponseEntity editMember(@PathVariable("member-id") long memberId){ Map<String, Object> member1 = new HashMap<>(); if (members.get(1)==member1) { member1.put("phone","010-1111-2222"); return new ResponseEntity<>(HttpStatus.OK); }else{ return new ResponseEntity<>(HttpStatus.NOT_FOUND); } }
- member id๊ฐ 1์ผ ๋ ์์ ํ๋ ๊ฑฐ๋๊น key๊ฐ 1(memberId=1)์ผ๋ ๊ฐ์ผ๋ก member1์ ํด๋น๋๋ฉด member1์ phone์ ํด๋นํ๋ ์ ํ๋ฒํธ๋ฅผ 010-1111-2222๋ก ์์ ํ ํ ResponseEntity๋ก ๋ฆฌํด.
- ๊ทผ๋ฐ ์๊พธ HTTP์ํ์ฝ๋ 400๋ฒ๋๋ง ๋จ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๊ฐ์ฌ๋๊ป ๋์ ์์ฒญ
2) ๋ค์ ํผ ์ฝ๋
๊ฐ์ฌ๋ ์กฐ์ธ๋ฃ๊ณ ์๊ฐํ ์ฝ๋ 1) ์ ๋ฌธ์ ์ .
- ๋งค๊ฐ์ธ์๋ก @RequestParam ์์ โ ํด๋ผ์ด์ธํธ์์ ์ฟผ๋ฆฌ์ ์กํ๋ฉด ์๋ฒ์์ ์ ๋ฌ๋ฐ์๋ ์ฌ์ฉ
- member๊ฐ 1์ด๋ผ๋ ๊ฒ์ ์์ฒญ์ ์ํ ๊ฒ(๋งค๊ฐ์ธ์์ ์ค๋ ๊ฐ)์ด๋ฏ๋ก ํด๋น key๊ฐ ์กด์ฌํ๋์ง๋ฅผ ํ์ธํด์ ์์ผ๋ฉด ๋ฒํธ ์์ .
- ๋ฒํธ ์์ ์ ์ฟผ๋ฆฌ์์ ์งํํ๋๊น ๋งค๊ฐ์ธ์ RequestParam์ ๋ณ์๋ก ์ ํด์ค ๊ฒ.
- ResposeEntity์ ๋ฐ๋๋ ๊ฐ์ด ๋ฆฌํดํด์ผ ํจ โ ์๊ตฌ ์กฐ๊ฑด์ ๋ช ์๋์ด์์.
1 2 3 4 5 6 7 8 9 10 11
@PatchMapping("/{member-id}") public ResponseEntity editMember(@PathVariable("member-id") Long memberId,@RequestParam("phone") String phone){ Map<String, Object> member1 = new HashMap<>(); if(members.containsKey(memberId)) { member1 = members.get(memberId); member1.put("phone",phone); return new ResponseEntity<>(member1,HttpStatus.OK); }else{ return new ResponseEntity<>(member1,HttpStatus.NOT_FOUND); } }
- memberId๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ฐ์ ํด๋นํ๋ ๊ฐ์ฒด๋ฅผ member1 ๋ณ์๋ก ์ง์
-
member1์ ๋ณ์์ phone์ด๋ผ๋ ํค์ ๊ฐ์ ํด๋นํ๋ phone์ ์์ .
(๊ฐ์ ์ค๋ณต์ด ์๋์ putํ ๊ฒฝ์ฐ ๊ธฐ์กด์ ๊ฐ์์ ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋จ)
- ResposeEntity์ body๋ฅผ ํฌํจํด์ผํ๋ฏ๋ก member1๊ณผ ์ํ์ฝ๋๋ฅผ ํจ๊ป ๋ฐํ.
-
ํ์์ ๋ณด ์ญ์ ๋ฅผ ์ํ ํธ๋ค๋ฌ ๋ฉ์๋ ๊ตฌํ
1) ์ฒ์ ์์ฑํ ์ฝ๋
1 2 3 4 5 6 7 8 9 10
@DeleteMapping("/{memberId}") public ResponseEntity deleteMember(@PathVariable("member-id") long memberId){ if (members.containsKey(memberId)) { members.remove(memberId); return new ResponseEntity<>(null,HttpStatus.NO_CONTENT); }else{ return new ResponseEntity<>(HttpStatus.NOT_FOUND); } }
์๊พธ 500๋ฒ ์ํ์ฝ๋๋จ๋ฉด์ ์๋๊ธธ๋ ์ฝ์๋ณด๋
1
Resolved [org.springframework.web.bind.MissingPathVariableException: Required URI template variable 'member-id' for method parameter type long is not present]
์๊ณ ๋ณด๋ DeleteMapping์ ๊ฒฝ๋ก์ pathVariable์ ๊ฒฝ๋ก๊ฐ ์ผ์นํ์ง ์์์ ๋๋ ์ค๋ฅ ์. ๋์ ๋ฌธ์์ด์ ๊ฐ์์ผ ํ๋ค! ์์ง๋ง๊ธฐ
ํธ๋ค๋ฌ ๋ฉ์๋ ๊ตฌํ 2
-
coffeeId๊ฐ 1์ธ ์ปคํผ ์ ๋ณด ์ค์์ ์๋ ์ ๋ณด๋ฅผ ์์ ํ๋ ํธ๋ค๋ฌ ๋ฉ์๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 1. ์ปคํผ ์ ๋ณด ์์ ์ ์ํ ํธ๋ค๋ฌ ๋ฉ์๋ ๊ตฌํ @PatchMapping("/{coffeeId}") public ResponseEntity editCoffee(@PathVariable ("coffeeId")long coffeeId, @RequestParam("korName") String korName, @RequestParam("price") int price){ Map<String,Object> coffee1=new HashMap<>(); if(coffees.containsKey(coffeeId)){ coffee1=coffees.get(coffeeId); coffee1.put("korName",korName); coffee1.put("price",price); return new ResponseEntity<>(coffee1, HttpStatus.OK); }else{ return new ResponseEntity<>(HttpStatus.NOT_FOUND); } }
-
coffeeId๊ฐ 1์ธ ์ปคํผ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ ํธ๋ค๋ฌ ๋ฉ์๋
1 2 3 4 5 6 7 8 9 10
// 2. ์ปคํผ ์ ๋ณด ์ญ์ ๋ฅผ ์ํ ํธ๋ค๋ฌ ์๋ ๊ตฌํ @DeleteMapping("/{coffeeId}") public ResponseEntity deleteCoffee(@PathVariable("coffeeId") long coffeeId){ if(coffees.containsKey(coffeeId)){ coffees.remove(coffeeId); return new ResponseEntity<>(null,HttpStatus.NO_CONTENT); }else{ return new ResponseEntity<>(HttpStatus.NOT_FOUND); } }
### comment
1-1๋ฒ์์ ํ๋ฒ ๊ฐ ์ก๊ณ ๋๋๊น ๋์ถฉ ์ด๋ค ์์ผ๋ก ๋์๊ฐ๋์ง ์ดํด๊ฐ ๊ฐ๋ค. ์ฒ์์ ํ๋ค์๋ ์ด์ ๋ annotation๋ ๋ง๊ณ ์ ์ฌ์ฉํ๋ ๊ฑด์ง ์ดํด๋ ๋ชปํ๋๋ฐ ์ง์ ์ฝ๋์น๊ณ annotation์ ๊ณต์๋ฌธ์๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ ์ฝ์ด๋ณด๊ณ ํ๋ ์ ์ฌ์ฉํ๋์ง ์ด๋ป๊ฒ ์ฐ๋ ๊ฑด์ง ๋๋ต ๊ฐ์ด ์์ ๋คํ์ด์๋ค. dto ๋ค์ด๊ฐ๋ฉด ๋ ์ด๋ ต๋ค๋๋ฐ ~~ ๋ถ๋ ๋ฐ๋ผ์ก์ ์ ์๊ธฐ๋ฅผ!
Leave a comment