본문 바로가기
Spring/Boot

스프링부트 응답 메시지 보내기

by dyddyd0 2024. 9. 1.

http 상태메시지를 전송할 때,

성공 시 상태메시지와 오류상태메시지를 원하는 내용으로 지정해 보내줄 수 있다.

 

 

-Controller 클래스의 닉네임 중복체크기능-

@PostMapping("/nickname-check")
    public ResponseEntity<?> nicknameCheck(MemberDto memberDto){
        ResponseDto<Map<String, String>> responseDto = new ResponseDto<>();
        Map<String, String> returnMap = new HashMap<>();

        try{
            returnMap = memberService.nicknameCheck(memberDto.getNickname());
            responseDto.setStatusCode(HttpStatus.OK.value());
            responseDto.setStatusMessage("OK");
            responseDto.setData(returnMap);

            return ResponseEntity.ok(responseDto);
        }catch (Exception e){
            if(e.getMessage().equals("nickname duplicated")){
                responseDto.setStatusCode(602);
            } else {
                responseDto.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
            }
            responseDto.setStatusMessage(e.getMessage());
        }
        return ResponseEntity.internalServerError().body(responseDto);
    }

위 코드와 같이 ResponseDto에 상태코드, 상태메시지, 데이터 가 들어가는데,

 setStatusMessage 메서드를 통해 원하는 응답 메시지를 넣어줄 수 있다.

 

 

-ServiceImpl 클래스의 닉네임 중복체크 서비스-

@Override
    public Map<String, String> nicknameCheck(String nickname) {
        Map<String, String> returnMap = new HashMap<>();
        int nicknameCheck = memberMapper.nicknameCheck(nickname);

        if(nicknameCheck != 0){
            throw new RuntimeException("nickname duplicated");
        }
        returnMap.put("nicknameCheckMsg", "nicknameOK");
        return returnMap;
    }

 

 

Service 단에서 에러를 RuntimeException으로 ( throw new RuntimeException("nickname duplicated"); ) 던져주어서 다음과 같이 중복 발생 시 500(Internal Server Error) 오류가 발생한다.

하지만 컨트롤러 단에서 responseDto에 상태 코드를 602번으로 넣어주어 오류 객체에 들어있는 responseJSON의 상태 코드에 602가 들어있는 모습을 볼 수 있다.

 

더보기

join.html의 닉네임 중복체크 ajax

---

$("#btn-nickname-check").on("click", (e) => {
                   if($("nickname").val() === ""){
                       alert("닉네임을입력하세요");
                       $("#nickname").focus();
                       return;
                   }
                   // ajax 로 중복확인하기.
                    $.ajax({
                        url: `/member/nickname-check`,
                        type: `post`,
                        // dataType: `json`,
                        data: $("#join-form").serialize(),
                        success: (obj) => {
                            // console.log(obj);
                            if(obj.statusCode === 200) {
                                if(confirm(`사용가능한 닉네임입니다. ${$("#nickname").val()}을 사용하시겠습니까?`)) {
                                    nicknameCheck = true;
                                    $("#btn-nickname-check").attr("disabled", true);
                                }
                            }
                        },
                        error: (err) => {
                            // console.log(err.responseJSON);
                            if(err.responseJSON.statusCode === 602){
                                alert("중복된 닉네임 입니다.");
                                nicknameCheck = false;
                                $("#nickname").focus();
                                console.log(err);
                                console.log(err.responseJSON.statusCode);
                                return;
                            }
                            alert("알 수 없는 에러 발생. 관리자에게 문의하세요.");
                        }
                    });
                    $("#nickname").on("change", (e) => {
                        nicknameCheck = false;
                        $("#btn-nickname-check").attr("disabled", false);
                    });

                });

 

위와 같이 상태코드를 직접 지정해 주면, 조건문에 상태코드를 넣어 에러발생 시 원하는 동작을 넣어줄 수 있음

if(err.responseJSON.statusCode === 602){
                                alert("중복된 닉네임 입니다.");
                                nicknameCheck = false;
                                $("#nickname").focus();
                                console.log(err);
                                console.log(err.responseJSON.statusCode);
                                return;
                            }

 

반응형

'Spring > Boot' 카테고리의 다른 글

스프링부트 thymeleaf 정리하기  (0) 2024.08.22
스프링부트 ResponseEntity<T>  (0) 2024.08.17
스프링부트 RESTful Api  (0) 2024.08.15