경력사항 중 하나를 삭제하려고 할 때
java.lang.IllegalStateException: Optional int parameter 'exp_no' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.
에러가 발생했다.
method를 delete로 처리하려면 int 값 그 자체를 넘기면 에러가 발생하며 삭제 처리가 되지 않는다.
deleteDB에 expNO 값을 바로 보내주었다. 콘솔에 해당 경력사항의 exp_no의 숫자가 분명히 다 넘어갔는데도 불구하고 백에서 IllegalStateException이 계속 발생하였다.
const handleDeleteRow = async (index) => {
const expNo = filteredExList[index].EXP_NO;
if (expNo) {
try {
// 유효한 EXP_NO 값을 가진 경우에만 삭제 요청을 보냄
await empExpDeleteDB(expNO);
// 삭제 후 목록 새로고침
getExpList();
} catch (error) {
console.error("경력 삭제 에러 :", error);
}
} else {
console.error("경력 삭제 에러: EXP_NO가 유효하지 않거나 존재하지 않습니다.");
}
const updatedList = [...filteredExList];
updatedList.splice(index, 1);
setFilteredExList(updatedList);
setShowSaveButtons(showSaveButtons.filter((value, idx) => idx !== index)); // 삭제된 행에 대한 저장 버튼 제거
};
Api에서 expNO를 그대로 보냈다. 콘솔로 찍어봤을 때도 exp_no가 다 제대로 넘어갔으나 에러가 발생하였다.
export const empExpDeleteDB = (expNO) => {
return new Promise((resolve, reject) => {
try {
const response = axios({
method: "delete",
url: process.env.REACT_APP_SPRING_IP + "emp/experienceDelete",
params: expNO,
});
resolve(response);
console.log(response);
} catch (error) {
reject(error);
}
});
};
여러 해결 방법을 찾던 중, 해결방법과 유사하게 {키:값}
으로 값을 넘겼다.
그러나 이때는 DELETE http://localhost:8000/emp/experienceDelete 500 (Internal Server Error)
500번 에러가 떴었다.
500번 에러가 떴던 이유는 data
로 값을 보냈기 때문이다.
export const empExpDeleteDB = (expNo) => {
return new Promise((resolve, reject) => {
try {
const response = axios({
method: "delete",
url: process.env.REACT_APP_SPRING_IP + "emp/experienceDelete",
data: {exp_no: expNo},
});
resolve(response);
console.log(response);
} catch (error) {
reject(error);
}
});
};
deleteDB에 값을 넘길 때, expNO를 그대로 넘기는 것이 아니라 {키:값}
으로 보내줘야 한다.
const handleDeleteRow = async (index) => {
const expNo = filteredExList[index].EXP_NO;
if (expNo) {
try {
// 유효한 EXP_NO 값을 가진 경우에만 삭제 요청을 보냄
await empExpDeleteDB({exp_no: expNo});
// 삭제 후 목록 새로고침
getExpList();
} catch (error) {
console.error("경력 삭제 에러 :", error);
}
} else {
console.error("경력 삭제 에러: EXP_NO가 유효하지 않거나 존재하지 않습니다.");
}
const updatedList = [...filteredExList];
updatedList.splice(index, 1);
setFilteredExList(updatedList);
setShowSaveButtons(showSaveButtons.filter((value, idx) => idx !== index)); // 삭제된 행에 대한 저장 버튼 제거
};
그리고 Api에서는 params로 값을 넘겨주어야 한다.
export const empExpDeleteDB = (params) => {
return new Promise((resolve, reject) => {
try {
const response = axios({
method: "delete",
url: process.env.REACT_APP_SPRING_IP + "emp/experienceDelete",
params: params,
});
resolve(response);
console.log(response);
} catch (error) {
reject(error);
}
});
};
delete는 {키:값}
형태로 백으로 값을 보낼 것!!!!!!!!
값을 보낼 때는 data가 아닌 params
!!!!!!!!!!!!