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 |