본문 바로가기

프로그래밍/Java

jQuery ajax - REST API 호출 시 HTTP 200에서 에러나는 경우 (HTTP 204)

반응형

keywords: java, spring, rest controller, rest api, jquery ajax

오류

jQuery ajax로 REST API를 호출하여 정상적으로 저장 다 되고 HTTP 200을 리턴했는데 화면단에서 오류가 났다.

$.ajax({
    type: 'post'
    // ... 어쩌고저쩌고
}).done(function(){
    console.log('success');
}).fail(function(jqXhr){
    console.error(jqXhr);
});

컨트롤러에서는 이렇다.

    @PostMapping("/set-password")
    public ResponseEntity<Void> setPassword(@RequestBody Map<String, String> payload) throws Exception {
        // 어쩌고 저쩌고
        return ResponseEntity.ok().build();
    }

아무래도 response 내용이 없어서 jQuery가 못 받는 것 같다. 근데 ResponseEntity<Void>인데 어쩌라는 걸까?

해결

이래저래 검색을 하다 보니 204 No Content 라는 상태가 있다. 아래 글을 읽어 보자.


HTTP 204 No Content 성공 상태 응답 코드는 요청이 성공했으나 클라이언트가 현재 페이지에서 벗어나지 않아도 된다는 것을 나타냅니다. 기본값에서 204 응답은 캐시에 저장할 수 있습니다. 캐시에서 가져온 응답인 경우 ETag 헤더를 포함합니다.

흔히 204를 반환하는 경우는 PUT 요청에 대한 응답으로, 사용자에게 보여지는 페이지를 바꾸지 않고 리소스를 업데이트할 때 쓰입니다. 리소스를 생성한 경우엔 201 Created를 대신 반환합니다. 새롭게 업데이트한 페이지를 보여줘야 할 경우 200을 사용해야 합니다.


    @PostMapping("/set-password")
    public ResponseEntity<Void> setPassword(@RequestBody Map<String, String> payload) throws Exception {
        // 어쩌고 저쩌고
        return ResponseEntity.noContent().build();
    }

HTTP 상태도 모르는 웹개발자...부끄럽다.

참고 자료

204 No Content - MDN https://developer.mozilla.org/ko/docs/Web/HTTP/Status/204

반응형

개발자가 그리는 인스타툰 팔로우하세요!