[ ResponseEntityController.java ]
//map 형태의 메시지 커스텀
// {
// "status" : "ok"
// "error message" : "error 발생"
// }
@GetMapping("map_custom1")
public ResponseEntity<Map<String, String>> customMap1(){
Map<String, String> body = new HashMap<>();
HttpStatus status = HttpStatus.INTERNAL_SERVER_ERROR;
body.put("status", Integer.toString(status.value())); //responseBody에 출력되도록 넣기
body.put("error message", status.getReasonPhrase());
return new ResponseEntity<>(body, status); //status에 담긴 값은 header로 나가고, body에 담긴 Map은 json 형태로 나감.
}
//status 201(생성), message : 객체
// {
// "status" : "ok"
// "error message" : {aa, bb, cc}
// }
// 한 필드에 여러 개의 값이 들어오는 경우 -> Object 사용
// 실무에서는 필요한 값들을 모두 body에 넣어서 전달
@GetMapping("map_custom2")
public ResponseEntity<Map<String, Object>> customMap2(){
Map<String, Object> body = new HashMap<>();
HttpStatus status = HttpStatus.CREATED;
Member member = new Member("choi", "choi@naver.com", "1234");
body.put("status", Integer.toString(status.value()));
body.put("error message", member);
return new ResponseEntity<>(body, status); //status에 담긴 값은 header로 나가고, body에 담긴 Map은 json 형태로 나감.
}
🖥️ 상태코드와 객체가 넘어오도록 변경해서 "공통소스"로 사용할 수 있게 변경
성공 => Object & 상태 코드 출력
실패 => 실패 메시지 & 상태 코드 출력
[ MemberRestController.java ]
@GetMapping("member/find/{id}")
public ResponseEntity<Map<String, Object>> findMember(@PathVariable int id){
MemberResponseDto memberResponseDto = null;
try{
memberResponseDto = memberService.findById(id);
// 예외 안터지면 객체+상태코드
return ResponseEntityController.responseMessage(HttpStatus.OK, memberResponseDto);
}catch(Exception e){
e.printStackTrace();
// 예외터지면 상태코드만
return ResponseEntityController.errResponseMessage(HttpStatus.NOT_FOUND);
}
}
[ ResponseEntityController.java ]
errResponseMessage()와 responseMessage()의 반환 타입을 통일 💡
-> 두 메서드 반환 타입이 같지 않다면 MemberRestController의 findMember()에서 반환 타입이 애매해짐
public static ResponseEntity<Map<String, Object>> errResponseMessage(HttpStatus status){
Map<String, Object> body = new HashMap<>();
body.put("status", Integer.toString(status.value())); //responseBody에 출력되도록 넣기
body.put("error message", status.getReasonPhrase());
return new ResponseEntity<>(body, status); //status에 담긴 값은 header로 나가고, body에 담긴 Map은 json 형태로 나감.
}
public static ResponseEntity<Map<String, Object>> responseMessage(HttpStatus status, Object object){
Map<String, Object> body = new HashMap<>();
body.put("status", Integer.toString(status.value()));
body.put("message", object);
return new ResponseEntity<>(body, status); //status에 담긴 값은 header로 나가고, body에 담긴 Map은 json 형태로 나감.
}
✔️ 성공
✔️ 실패
🖥️ 어떤 에러가 났는지의 정확한 문구를 출력해보자
[ ResponseEntityController.java ]
넘어온 message 를 출력하기 위해 message 매개변수 추가
public static ResponseEntity<Map<String, Object>> errResponseMessage(HttpStatus status, String message){
Map<String, Object> body = new HashMap<>();
body.put("status", Integer.toString(status.value())); //responseBody에 출력되도록 넣기
body.put("error message", message);
return new ResponseEntity<>(body, status); //status에 담긴 값은 header로 나가고, body에 담긴 Map은 json 형태로 나감.
}
[ MemberService.java ]
기존 :: 방식에서 에러를 던지면서 문자열을 넘길 수 있는 () -> new Exception("") 형식으로 변경
public MemberResponseDto findById(int id) throws EntityNotFoundException {
// Member member = memberRepository.findById(id).orElseThrow(EntityNotFoundException::new);
Member member = memberRepository.findById(id).orElseThrow(()-> new EntityNotFoundException("검색하신 ID의 Member가 없습니다."));
[ ResponseEntityController.java ]
MemberService > findById의 .orElseThrow에서 넘어온 에러 메시지 정보를 실제 사용자에게 출력
@GetMapping("member/find/{id}")
public ResponseEntity<Map<String, Object>> findMember(@PathVariable int id){
MemberResponseDto memberResponseDto = null;
try{
memberResponseDto = memberService.findById(id);
return ResponseEntityController.responseMessage(HttpStatus.OK, memberResponseDto);
}catch(Exception e){
e.printStackTrace();
//orElseThrow에서 넘어온 에러 메시지 정보를 실제 사용자에게 주자
return ResponseEntityController.errResponseMessage(HttpStatus.NOT_FOUND, e.getMessage());
}
}
✔️ 성공
'Back-End 공부 > Spring' 카테고리의 다른 글
[Web] WebServer와 WAS 차이 쉽게 이해하기 (0) | 2024.01.20 |
---|---|
코드로 보는 Servlet과 Controller의 차이 GET POST 요청 (0) | 2024.01.19 |
스프링 RestFul - 기본 CRUD 만들기 프로젝트 (0) | 2024.01.18 |
스프링 HTML 화면없이 PostMan으로 테스트하기 (0) | 2024.01.18 |
스프링 MVC - 기본 CRUD 만들기 프로젝트 (0) | 2024.01.17 |