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으로 데이터를 받아야 합니다.

 

어찌보면 당연한 이야기...