[Spring MVC] controller handlerMethod ์‹ค์Šต

Updated:

Categories:

Tags: , ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

ํ•ธ๋“ค๋Ÿฌ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

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) ์ฒ˜์Œ ์ž‘์„ฑ ์ฝ”๋“œ

    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๊ณผ ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜.
  2. ํšŒ์›์ •๋ณด ์‚ญ์ œ๋ฅผ ์œ„ํ•œ ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

    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

  1. 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);
             }
         }
    
  2. 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 ๋“ค์–ด๊ฐ€๋ฉด ๋” ์–ด๋ ต๋‹ค๋Š”๋ฐ ~~ ๋ถ€๋”” ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ!








Spring ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment