클라이언트로 부터 데이터를 받아 처리하는 과정에서 단순하게 DB에 Insert 할 데이터만 서버로 보내주고 return 하는 값은 없도록 하려고 void로 클래스를 설정을 했는데 HTTP Status는 200을 향하지만 Ajax에서는 error: function()
로직을 처리하는데 뭐가 문제인지 한참 고민하다가 발견했다.
소스는 다음과 같다
Controller
@RequestMapping(value = "/example/test/insertDiagram.do", method = RequestMethod.POST)
@ResponseBody
public void insertDiagram(@RequestBody String diagram) {
diagramService.insertDiagram(diagram);
}
여기에서는 문제되는 로직은 없었다.
계속 로직과 넘겨주는 값을 바꾸어 보았는데도 불구하고 계속 에러를 발생시켜서 고민 한 결과 클라이언트에서 문제가 있었다.
Client
$.ajax({
url: "/example/test/insertDiagram.do",
type: "POST",
dataType: 'json',
contentType:'application/json; charset=utf-8',
data: JSON.stringify({
"처리할 데이터",
}),
success: function(){
alert("저장완료");
},
error: function(){
console.error("insertDiagram.do Error");
}
});
Ajax 코드에서 살펴보면 dataType : 'json'
이 있다. Ajax의 데이터 반환 형태는 json인데 실질적으로 넘어오는 반환값은 void로 없다. 반환값의 불일치로 발생하는 에러였다.
해결방법은...
-> dataType : 'json'를 지워버린다.😀