Wanna be Brilliant Full-Stack Developer
SpringBoot 공통 응답 DTO 만들기 본문
메시지를 같이 띄우기 위해서는 핸들러에 Map타입이니까 Map 밖에 리턴을 못한다.
두가지를 동시에 하고 싶을때는
package com.cos.photogramstart.web.dto;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class CMRespDto {
private String message;
private Map<String, String> errorMap;
}
package com.cos.photogramstart.handler;
import java.util.Map;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import com.cos.photogramstart.handler.ex.CustomValidationException;
import com.cos.photogramstart.web.dto.CMRespDto;
@RestController
@ControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(CustomValidationException.class) // RuntimeExcpetion -> CustomValidaionException 으로 변경
public CMRespDto validationException(CustomValidationException e) {
return new CMRespDto(e.getMessage(), e.getErrorMap());
}
}
우리가 어떠한걸 응답할때 CMRespDto를 사용하게 되는데 어떤거는 message나 어떤 내용( Map<String,String> errorMap;을 리턴하게 되는데 다른곳에서는 데이터를 리턴할수도 있다.
ex) 사용자 정보를 달라고하는 CMRespDto를 사용할수 없다.
에러를 리턴할때는 private String message;
private Map<String, String> errorMap; 이 두개만 하면되는데 User데이터를 요청하면 Map이 쓸모가 없기때문에
그렇기 떄문에 제네릭이라는것을 사용할수있다.
내가 무엇을 리턴할지 확실히 잘 모를때는 public CMRespDto<?> 로 정하면된다.
만약 저기에 <Integer>로 하고 "문자열"을 넣으면 오류가 나온다.
제네릭 타입리턴할때는 '?'를 넣는게 가장 쉽다.
'Back-End > Spring Boot' 카테고리의 다른 글
SpringBoot 로그인 2 (0) | 2022.02.11 |
---|---|
SpringBoot 로그인1 UserDetailsService (0) | 2022.02.10 |
SpringBoot 공통응답 Script 만들기! (0) | 2022.02.10 |
SpringBoot 글로벌 예외 처리하기 (0) | 2022.02.10 |
Spring Boot Project @ResponseBody 사용하기 (0) | 2022.02.09 |