기존에 본인이 작성했던 힐링 메시지를 삭제하는 API이다.
삭제할때는 삭제할 힐링메시지의 고유 번호를 전달하여 삭제한다.
만났던 오류
Name for argument of type [java.lang.Long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
별 것 아니였다.
스프링 부트 3.2부터 매개변수의 이름을 인식하지 못하는 문제가 있다고 한다.
스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 어노테이션의 이름을 생략할 수 있다.
주로 다음 어노테이션에서 해당 오류가 많이 난다.
@RequestParam, @PathVariable, @Autowired, @ConfigurationProperties
그때는 다음과 같이 명확하게 매개변수의 이름을 지명해줘야 한다.
@RequestMapping("/request")
public String request(@RequestParam("username") String username) {
...
}
@RequestMapping("/request")
public String request(@RequestParam String username) {
...
}
public String mappingPath(@PathVariable("userId") String userId) {
...
}
* 힐링 메시지 삭제 API
* @param request 사용자 요청
* @return 삭제 완료 메시지
*/
@Operation(summary = " 힐링 메시지 삭제 API ", description = "")
@DeleteMapping("/{messageId}")
public ResponseEntity<String> delete(HttpServletRequest request, @PathVariable("messageId") Long messageId){
/* 선택한 힐링 메시지 삭제 */
healingMessageService.delete(request,messageId);
return ResponseEntity.ok("힐링 메시지 삭제 완료");
}
위에서처럼 매개변수를 정확하게 지칭해야 한다.
그러면 클라이언트 측에서는 다음과 같이 요청을 보낼 수 있다.
http://localhost:8080/healingmessage/1
/**
* 힐링 메세지 삭제 메서드
* @param request 사용자 요청
* @param messageId 삭제할 힐링 메시지 고유 번호
*/
void delete(HttpServletRequest request, Long messageId);
/**
* 힐링 메시지 삭제 메서드
* @param request 사용자 요청
* @param messageId 삭제할 힐링 메시지 고유 번호
*/
@Override
public void delete(HttpServletRequest request, Long messageId) {
/* 힐링 메시지 삭제 */
healingMessageMapper.delete(messageId);
}
/**
* 힐링 메시지 삭제
* @param messageId 삭제할 메시지의 고유 번호
*/
void delete(Long messageId);
<!-- 선택한 힐링 메시지 삭제 -->
<delete id="delete">
DELETE FROM healing_message
WHERE messageId = #{messageId}
</delete>
원래 존재하던 힐링 메시지

삭제 성공

