μ€λλ λ§μ£ΌμΉ μλ¬
κΈ°λ₯μ ꡬννκ³ νλ‘ νΈμ μ°κ²°νμ¬ νλμ© ν΄κ²°νλ μ€, μλμ κ°μ μλ¬κ° λ°μνμμ΅λλ€.
2023-12-01T02:42:01.109+09:00 WARN 90341 --- [io-8081-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver :
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing:
public org.springframework.http.ResponseEntity<?> wanted.assignment.pmsystem.domain.planner.board.
BoardController.deleteBoard(wanted.assignment.pmsystem.domain.planner.board.dto.requests.DeleteBoardRequest)]
Plain Text
볡μ¬
μ²μ보λ μλ¬μ λΉν©μ€λ¬μ μ§λ§, λ νλλλ‘ μμ²μ΄ μ λλ‘ κ°λμ§ λΆν° νμΈνμμ΅λλ€.
μλ λͺ
μΈλ DELETE http://localhost:8081/api/boards μ request body λ‘ board μ μΈλ±μ€λ₯Ό λ΄μ λκΈ°λ κ²μ΄μμ΅λλ€. νμ§λ§ μμ κ°μ μ€λ₯κ° λ°μνκ³ , μμΈμ μ°Ύμ보μμ΅λλ€.
DELETE μμλ payload body λ₯Ό λͺ»μ°λκ±ΈκΉ?
DEELTE λͺ
μΈμλ μ΄μμ΄ μκ³ , request body μλ λ¬Έμ κ° μλλ° μ μ²λ¦¬λ₯Ό λͺ»νλκ±΄μ§ μ²μμ μλμ κ°μ μ€λ₯λ₯Ό λ³΄κ³ μ°Έ λΉν©νμ΅λλ€.
2023-12-01T02:49:12.598+09:00 WARN 90341 --- [nio-8081-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver :
Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' is not supported]
Plain Text
볡μ¬
νλ‘ νΈμμ λκ° λμΉκ² μλ μΆμ΄ μ°¬μ°¬ν μ΄ν΄λ³΄λ νλ¦°κ² μ ν μμ΄λ³΄μμ΅λλ€. 500 μλ¬λ μλκ³ 401 μλ¬λ λκ° μΈμ¦λ¬Έμ μΈκ° μΆμ΄ μ΄ν΄λ΄€λλ° κ·Έ λν μλμμ΅λλ€. μ΄λ κ² λνλ² λ§μνμ λΉ μ§ κΉμμβ¦ π« Β
곡λΆνκ³ λ³΄λ μ΄λ νλ‘ νΈμμ DELETE 맀ν μ request body μ κ°μ λ£μ΄λ³΄λΌ λ μ’
μ’
λνλλ μ€λ₯λΌκ³ ν©λλ€. λν μΌλ°μ μΌλ‘λ DELETE 맀ν μ request body λ₯Ό μ¬μ©νμ§ μλλ€κ³ νλλ°μβ¦ Β μ κ·Έλ°μ§ μλμμ μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€.
HTTP μ€νμμλ λͺ ννκ² DELETE μ μμ² λ³Έλ¬Έμ μ¬μ©μ κΈνμ§ μμ΅λλ€.
κ·Όλ° μ λ§μ μ¬λλ€μ΄ μ°μ§ μλκ±ΈκΉμ? DELETE λ 리μμ€λ₯Ό μ κ±°νλ λ° μ¬μ©λλ©° μ΄λ μΌλ°μ μΌλ‘ 리μμ€ μλ³μ(μ URL) λ₯Ό ν΅ν΄ μνλ©λλ€. μ¦, μΆκ° λ°μ΄ν°κ° νμνμ§ μμ κ²½μ°κ° λ§μ΅λλ€. νμ§λ§ μμ² λ³Έλ¬Έμ ν¬ν¨μν€λ©΄ μ΄ κ°κ²°νκ³ λͺ
νν ν΅μ μ΄ λ³΅μ‘ν΄μ§ μ μμ΅λλ€. λ§μ HTTP ν΄λΌμ΄μΈνΈ, μλ² λ° μ€κ°μ λ€μ DELETE μμ²μ λ³Έλ¬Έμ μμνμ§ μκΈ° λλ¬Έμ μ΄λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§ λͺ»ν μ μμ΅λλ€. λ°λΌμ νμ€νλ μ κ·Ό λ°©μμ λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€. νμ§λ§ μμ² λ³Έλ¬Έμ΄ νμν κ²½μ°λ μμ΅λλ€. μλ₯Ό λ€μ΄ 볡μ‘ν μμ 쑰건μ΄λ μΆκ° λ©ν λ°μ΄ν°λ₯Ό μ μ‘ν΄μΌ νλ κ²½μ°μ ν΄λΉν©λλ€. νμ§λ§ μ΄λ μΌλ°μ μΈ κ΄νμ΄ μλλ©° νΉμ μ ν리μΌμ΄μ
μ μꡬμ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
μλ κ·ΈλΌ μ΄μ νλ‘μ νΈμμ λ DELETE μ΄λ»κ² νλλΌ
μ°Ύμ보λ @RequestParam μΌλ‘ μ²λ¦¬λ₯Ό νμμ΅λλ€. νμ§λ§ boardId=1 μ΄λ κ² url μ λ°νλκ² λ³΄κΈ°μ«μλ μ λ @PathVariable λ‘ λ³κ²½νμμ΅λλ€.
μ΄λ²μ @PathVariable μ΄ λ¬Έμ
νμ§λ§ λλ€μ λνλ μλ¬β¦ λ€μ λ€νΈμν¬λ₯Ό μ°¬μ°¬ν μ΄ν΄λ³΄κ³ νλ‘ νΈμλ μ΄μμ΄ μμμ νμΈνμμ΅λλ€.
κ·Έλ¦¬κ³ spring boot μ service λ₯Ό νμΈν΄λ³΄μλλ°μ, μλμ κ°μ μ€λ₯κ° μ°νμλκ²μ νμΈν μ μμμ΅λλ€. μ€λ₯λ₯Ό μ°¬μ°¬ν μ½μ΄λ³΄λ©΄ νλΌλ―Έν° μ΄λ¦ μ λλ‘ μ§μ νλΌλ 건λ°μ,
java.lang.IllegalArgumentException: Name for argument of type [java.lang.Long] not specified, and parameter name information not found in class file either.
at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver.java:183)
~[spring-web-6.1.1.jar:6.1.1]at
Plain Text
볡μ¬
μλμ κ°μ΄ νλΌλ―Έν°λͺ
μ λͺ
ννκ² μ§μ ν΄μ£Όλ©΄ μ€λ₯λ ν΄κ²°λ©λλ€. μ κ·Έλ΄κΉμ?
@GetMapping(value = "/{boardId}")public ResponseEntity<?> displayBoardDetail (@PathVariable Long boardId)
@GetMapping(value = "/{boardId}")public ResponseEntity<?> displayBoardDetail (@PathVariable("boardId") Long boardId)
Java
볡μ¬
μ @PathVariable μ μ΄λ¦μ λͺ μμ μΌλ‘ μ§μ ν΄μΌ νλμ?
@PathVariable μ μ¬μ©ν λ "boardId"μ κ°μ΄ λ³μμ μ΄λ¦μ λͺ
μμ μΌλ‘ μ§μ νλ©΄, Spring Frameworkλ HTTP μμ²μ URL κ²½λ‘μμ ν΄λΉ λ³μ μ΄λ¦κ³Ό μΌμΉνλ λΆλΆμ μ°Ύμ λ©μλ νλΌλ―Έν°λ‘ μ λ¬νλ€κ³ ν©λλ€. λ§μ½ μ΄λ κ² μ§μ νμ§ μμΌλ©΄ Spring μ λ°νμ μμ νλΌλ―Έν°μ μ΄λ¦μ μ μ μμ΅λλ€. μ¦, @PathVariable μ λͺ
μμ μΌλ‘ μ΄λ¦μ μ 곡νμ§ μμΌλ©΄ μ΄λ€ URL κ²½λ‘ λ³μλ₯Ό μ΄λ€ νλΌλ―Έν°λ‘ 맀νν΄μΌ νλμ§ κ²°μ ν μ μμ΅λλ€. νλΌλ―Έν° μ΄λ¦μ λͺ
μμ μΌλ‘ μμ±νλ©΄ μ»΄νμΌ μ΅μ
μ κ΄κ³μμ΄ λ°νμμ μ¬λ°λ₯Έ 맀νμ΄ μ΄λ£¨μ΄μ§λλ€.