axios
로params
를 담아 보내는 과정에서 배열로 보낼때 400에러와 함께 파라미터가 이상하게 담겨서 전달된다.
const dongCode=[1111017600,1111018000,1111018200...]
const params ={
dong: dongCode,
};
dongList(
params,
(response) =>{
commit("SET_DETAIL_HOUSE", response.data);
},
(error) => {
console.log(error);
}
);
// api는 axios 객체를 생성한 것
function dongList(params, success, fail) {
api.get(`/map/apt`, { params: params }).then(success).catch(fail);
}
params
를 ,
로 구분하여 리스트형태로 전달하기 위해 join
을 사용했다.const params ={
dong: dongCode.join(","),
};
리스트로 전달받은 파라미터를 활용하여
select
문에 적용하니 리스트값이 아무것도 없을 때mybatis
내부 에러가 발생한다.
<select id="getAptInDong" resultType="houseInfoDto">
select *
from houseinfo
where dongCode in
<foreach collection="list" item="dong" open="(" separator="," close=")">
#{dong}
</foreach>
</select>
에러와 함께 발생하는 로그는 다음과 같다.
check the manual that corresponds to your MySQL server version for the right syntax to use near '~~~~'
MySQL 구문이 틀렸다고 하는건데 찾아보니 보통 where
절을 따옴표로 묶지 않아서 생기는 문제라고 한다.
구문을 if
로 조건을 나눠준다.
isEmpty()
함수를 통해 받아온 list
가 비어있는지 확인해 준다.
<select id="getAptInDong" resultType="houseInfoDto">
select *
from houseinfo
where dongCode in
<if test="dong.isEmpty()">("")</if>
<if test="!dong.isEmpty()">
<foreach collection="list" item="dong" open="(" separator="," close=")">
#{dong}
</if>
</foreach>
</select>