Wanna be Brilliant Full-Stack Developer

SpringBoot 공통 응답 DTO 만들기 본문

Back-End/Spring Boot

SpringBoot 공통 응답 DTO 만들기

Flashpacker 2022. 2. 10. 14:32

유효성 검사에 실패하였습니다라는 메시지는 함꼐 못올린 상태

메시지를 같이 띄우기 위해서는 핸들러에 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>로 하고 "문자열"을 넣으면 오류가 나온다. 

제네릭 타입리턴할때는 '?'를 넣는게 가장 쉽다.