Controller에서 아래와 같이 delete쿼리를 실행하는 메서드를 작성했습니다.
@DeleteMapping("/mac")
ResponseEntity<Message> deleteMac(@RequestBody String mac) {
if (StringUtils.isBlank(mac))
return ResponseEntity.badRequest().body(Message.write("MAC_FORMAT_ERR"));
return networkConnectionService.deleteMac(mac);
}
그런데 계속해서 쿼리문이 제대로 실행되지 않아서 쿼리문을 로그로 확인해보니 이렇게 들어가고 있었습니다.
DELETE FROM ␦␦␦␦␦␦␦␦␦␦␦␦␦␦␦␦
WHERE mac = '{
"mac" : "␦␦␦␦␦␦␦␦␦␦␦␦␦"
}'
프론트에서 JSON 형식으로
{
"mac" : "␦␦␦␦␦␦␦␦␦␦␦␦␦"
}
이렇게 보내주는데 Controller에서 (@RequestBody String mac)으로 받으면
String mac = "{"mac" : "␦␦␦␦␦␦␦␦␦␦␦␦␦"}"
중괄호부터 모두 String mac이 되어 버리는 것이었습니다.
이 문제를 해결하기 위해서 String이 아닌 HashMap으로 코드를 바꾸었습니다.
@DeleteMapping("/mac")
ResponseEntity<Message> deleteMac(@RequestBody HashMap<String, Object> map) {
String mac = (String)map.get("mac");
if (StringUtils.isBlank(mac))
return ResponseEntity.badRequest().body(Message.write("MAC_FORMAT_ERR"));
return networkConnectionService.deleteMac(mac);
}
@RequestBody를 파라미터로 받을 때는 미리 선언해둔 객체(VO, Dto)나 Map으로 데이터를 받아야 합니다.

어찌보면 당연한 이야기...
'Framework > Spring' 카테고리의 다른 글
| [Spring] byte 타입으로 변수 선언 시 java.lang.NullPointerException: null 에러발생 (0) | 2023.03.18 |
|---|---|
| [Spring] MyBatis resultType="Boolean"사용하기 (0) | 2023.03.18 |