Framework/Spring
[Spring] 파라미터 타입 선언 오류로 인한 Mybatis 쿼리 오류
ysg
2023. 4. 7. 11:50
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으로 데이터를 받아야 합니다.
어찌보면 당연한 이야기...