<전체 조회 시 출력 값>
=> "success" : true
"data":[{ 조회 값 }]
"error" : null
<게시글 작성 시 응답 값>
=>"success" : true
"data":[{ 작성한 것들 }]
"error" : null
<삭제 성공시>
<삭제 실패시>
에러메세지
<내가 만든 게시글 작성 시 응답 값>
^^,,,,, 여기까지 해놓고 다한 줄 알았음^^!!! 생각지도 못함
ㄴㅇㄱ
그러면 뭐다? 수정해줘야지 ^^ 야호!!
<차이점>
- 출력 값을 모두 data로 감싸서 그안에 입력되어있음 + success :boolean + error : code/msg 가 따로 뜸!
- success가 true일때 : 정상 출력, error : null
false 일때 : 에러메세지만 출력 data : null
1차로 든 생각은 [Controller]에서 리턴 값들을 모두 바꿔주면 되겠다! 뭘로?
=>Response Dto 를 따로 만들어서 감싸주면 되겠다 ! =>ResposeDto를 또 만들어도 되나..? =>Dto 는 필요한 만큼 만들면 됩니다 ^^^
2. 에러 메세지는 어쩌지? => 예외처리!! (채멘님 ,,,채멘,,,) try catch 사용하기!
1. [ResponseDto] 새로 생성 => 아예 패키지를 다시 만들어 줬다.
src/java/com/sparta/springhomework/domain/dto/resposeDto
@Getter
public class ResponseDto<T> { // 클래스명 제네릭 사용! T는 다른 걸로써도 상관없음!!
boolean success;
T data;
Error error;
public ResponseDto(boolean success, T data) { //생성자 1
this.success = success;
this.data = data;
}
public ResponseDto(boolean success, T data, ErrorCode errorCode) { //생성자 오버로딩 2
this.success = success;
this.data = data;
this.error = new Error(errorCode);
}
여기서 (공부했어야 하는) 제네릭타입을 쓴다! 아직 정리는 안했지만 간단하게 본다면
<아무문자나 가능> 은 무슨 타입이든 다 가능하다는 것 ... 즉 리턴으로 나가는 responseDto <원래 리턴값> 을 해주면 어떤 타입이든 리턴해줄 수 있다!!
★제네릭
2. 리턴 값을 만들어줬으면 이제 컨트롤러를 수정해주면 된다!
<전체조회>
src/java/com/sparta/springhomework/controller/PostingController
//전체조회
@GetMapping("/api/post")
public ResponseDto<List<Posting>> getPosting() {//원래 리턴 값을 ResponseDto로 감싸줌
List<Posting> data;// try-catch문에서는 리턴값이 지역변수이므로 따로 변수 지정!
try {
data = postingRepository.findAllByOrderByModifiedAtDesc();//true시 리턴 값
} catch (Exception e) {//예외처리//에러값은 나중에 !!수정
return new ResponseDto<List<Posting>>(false, null, ErrorCode.);
}
return new ResponseDto<List<Posting>>(true, data);//정상 출력시
}
3. 에러메세지는 따로 어떻게 관리하지..? error enum을 만들어준다! (채멘님,,,)
src/java/com/sparta/springhomework/domain/enums/Errorcode
@Getter
public enum ErrorCode {//enum 클래스의 기본 구조! 그냥 암기,,,
ENTITY_NOT_FOUND("NOT_FOUND", "데이터가 존재하지 않습니다."),
INVALID_ERROR("INVALID_ERROR","에러 발생!!!");
private final String code;
private final String message;
ErrorCode(String code, String message){
this.code = code;
this.message = message;
}
}
2022.08.10 - [JAVA] - [JAVA] 열거형 enum
[responseDto] 에도 에러부분을 추가해준다
@Getter
public static class Error {
private String code;
private String message;
public Error(ErrorCode errorCode){
this.code = errorCode.getCode();
this.message = errorCode.getMessage();
}
}
}
다시 [Controller]에서 에러시 나오는 메세지 값을 넣어준다.
//전체조회
@GetMapping("/api/post")
public ResponseDto<List<Posting>> getPosting() {
List<Posting> data;
try {
data = postingRepository.findAllByOrderByModifiedAtDesc();
} catch (Exception e) {
return new ResponseDto<>(false, null, ErrorCode.INVALID_ERROR);
}
return new ResponseDto<>(true, data);
}
그러면 출력이
이렇게 깔끔하게 나온다.. 감격 ㅠㅠ
이렇게 success값과 data, error를 나눠줘야 프론트쪽과 같이 협업할때 작업이 훨씬 용이해진다고 한다...
같은 방법으로 나머지 [Controller]도 수정한다.
<비밀번호 확인>
1. responseDto는 이미 있음
2.[Controller]단에서 수정해준다!
src/java/com/sparta/springhomework/controller/PostingController
//게시글 비밀번호 확인(비교)
@PostMapping("/api/post/{id}")//<>에 넣어줄때는 원시타입이 아닌 wrapper 클래스로 넣어주어야한다!
public ResponseDto<Boolean> comparePassword (@PathVariable Long id,@RequestBody PostingRequestDto.PostingPasswordDto postingPasswordDto) {
boolean data;//comparepassword 로직 리턴 값이 boolean이기때문에 값을 받아주는 변수를 data
try {
data = postingService.comparePassword(id, postingPasswordDto);
}catch (EntityNotFoundException e){//아이디 못찾을때 에러를 미리 지정을 했으므로 해당 에러를 감지하여 먼저 가져옴
log.error(e.getMessage());//에러메세지 로그에 띄움
return new ResponseDto<>(false,null,ErrorCode.ENTITY_NOT_FOUND);
}catch (Exception e){//나머지 에러들
log.error(e.getMessage());//에러메세지 로그에 띄움
return new ResponseDto<>(false,null,ErrorCode.INVALID_ERROR);
}
return new ResponseDto<>(true,data);
}
❗❗ [Service] comparePassword 함수
//비밀번호 비교
public boolean comparePassword ( Long id, PostingRequestDto.PostingPasswordDto postingPasswordDto) {
Posting posting = postingRepository.findById(id).orElseThrow(
() -> new EntityNotFoundException("해당 아이디가 존재하지 않습니다." +id));
return Objects.equals(posting.getPassword(), postingPasswordDto.getPassword());
}
※ 이미 함수 내에서 매개변수 아이디 값이 없으면 에러메세지를 띄우도록 해둠 !!!
① 리턴 값에 ResponseDto<Boolean> : <>안에서는 원시형이 아닌 wrapper class로 넣어주어야 한다! (제네릭 참조)
② 아까와 마찬가지로 리턴값을 받아줄 변수 data를 설정해준다
③try문 안에 정상 출력시 값을 입력 data= 으로 !! 지역변수!!
④catch문 : 이미 함수내에 아이디 못찾았을때 에러를 지정해둠!!
그러므로 catch도 (1) 아이디 못 찾았을 때 예외 (2) 나머지 예외 이렇게 처리해준다!!
※순차적으로 예외를 처리해 주므로 상위클래스인 Exception은 아래쪽에 적어둔다!!
✔Tip! log.error 활용하기!!✔
에러메세지가 로그에 찍히도록 하는 것! 현업에서 많이 사용하므로 평소에 쓰는 습관을 들이자!!!
-> 따로 꼭 정리하기!
개념이 헷갈리므로 예외처리는 다시 공부 하자 ^^!
2022.08.13 - [JAVA] - [JAVA] 예외처리(Exception) / Throws
<비밀번호 확인 출력값>
비밀번호 맞을 때
비밀번호 틀릴 때
아이디 잘못 입력시 (url 주소 틀림)
<지난 날의 수정들>
2022.08.17 - [SPRING] - [SPRING]입문주차 과제 비밀번호 확인 API 만들기
2022.08.17 - [SPRING] - [SPRING] 입문주차 과제 - 전체 게시글 목록 조회 / 게시글 조회
'🌿SPRING > 🌱연습[SPRING]' 카테고리의 다른 글
[SPRING] 좋아요 토글 만들기 (0,1) (0) | 2022.09.22 |
---|---|
[SPRING] 클론코딩 장바구니 로직 만들기 (0) | 2022.09.15 |
[SPRING] 회원정보 조회 로직 만들기 (0) | 2022.09.08 |
[SPRING] 입문주차 과제 - 전체 게시글 목록 조회 / 게시글 조회 (0) | 2022.08.17 |
[SPRING]입문주차 과제 비밀번호 확인 API 만들기 (0) | 2022.08.17 |