Spring Controller 구현 실습

uudean·2023년 6월 11일
0

Spring

목록 보기
5/13

커피정보 중 korName,price 수정

@RestController
@RequestMapping("/v1/coffees")
public class CoffeeController {
    private final Map<Long, Map<String, Object>> coffees = new HashMap<>();
	.
    .
    .
    @PatchMapping("/{coffee-Id}")
    public ResponseEntity updateCoffee(@PathVariable("coffee-Id") long coffeeId,
                                       @RequestParam("korName") String korName,
                                       @RequestParam("price") long price)
                                       {
        Map<String, Object> coffee = coffees.get(coffeeId);
        coffee.put("korName", korName);
        coffee.put("price", price);
        coffees.put(coffeeId, coffee);

        return new ResponseEntity<>(coffee, HttpStatus.OK);

    }
    @DeleteMapping("/remove/{coffee-Id}")
    public ResponseEntity removeCoffee(@PathVariable("coffee-Id") long coffeeId) {
        coffees.remove(coffeeId);

        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
}

결과

추가

위의 코드에서는 korName과 price만을 @RequestParam 어노테이션을 이용해 파라미터 값을 받았다.

@PatchMapping("/{coffee-Id}")
    public ResponseEntity updateCoffee(@PathVariable("coffee-Id") long coffeeId,
                                       @RequestParam("korName") String korName,
                                       @RequestParam("price") long price,
                                       @RequestParam("engName") String engName)
                                       {
        Map<String, Object> coffee = coffees.get(coffeeId);
        coffee.put("korName", korName);
        coffee.put("price", price);
        coffe.put("engName", engName);
        coffees.put(coffeeId, coffee);

        return new ResponseEntity<>(coffee, HttpStatus.OK);

사용자가 수정하길 원하는 커피정보를 선택적으로 수정하도록 구현하고 싶어 기본키인 coffeeId를 제외하고 모든 파라미터값을 가져왔다. 하지만 @RequestParam을 통해 가져온 파라미터 값을 모두 요청에 입력하지 않으면 다음과 같이 400 Bad Request 에러가 발생하였다.

위 오류를 해결하고자 알아본 결과로 @RequestParam 어노테이션은 required 조건이 없으면 기본적으로 true로 필수 파라미터이다. 따라서 @RequestParam에 명시한 요청 파라미터가 존재하지 않을 경우 400 Error를 웹 브라우저에게 전송하게 된다. 내가 원하는 것은 사용자가 선택해서 원하는 정보를 수정하는 것 이기 때문에 required 속성값을 false로 바꿔준다면 문제가 해결될 것이다.

public ResponseEntity updateCoffee(@PathVariable("coffee-Id") long coffeeId,
                                       @RequestParam(value = "korName"  ,required = false) String korName,
                                       @RequestParam(value = "price" , required = false) Long price,
                                       @RequestParam(value = "engName", required = false)String engName) {

        Map<String, Object> coffee = coffees.get(coffeeId);
        if(korName != null) {
            coffee.put("korName", korName);
        }
        if(price != null) {
            coffee.put("price", price);
        }
        if(engName != null) {
            coffee.put("engName", engName);
        }
        coffees.put(coffeeId, coffee);

        return new ResponseEntity<>(coffee, HttpStatus.OK);

    }

이와 같이 코드를 변경해 주니 정상적으로 작동되는 모습을 보인다.

0개의 댓글

관련 채용 정보