package com.takensoft.common.util; import com.takensoft.common.message.MessageCode; import lombok.RequiredArgsConstructor; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.nio.charset.Charset; /** * @author : takensoft * @since : 2025.01.22 * @modification * since | author | description * 2025.01.22 | takensoft | 최초 등록 * 2025.03.21 | 하석형 | 에러 응답 추가 메세지 추가 * * HTTP 응답 처리를 위한 유틸리티 */ @Component @RequiredArgsConstructor public class ResponseUtil { private final MessageSource messageSource; /** * @return JSON 응답을 위한 HttpHeaders 객체 * * HTTp 해더 생성성 */ private static HttpHeaders createHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8"))); return headers; } /** * @param messageCode - 메시지 코드 * @return 다국어 메시지 * * 다국어 메시지 호출 */ private String getMessage(MessageCode messageCode) { return messageSource.getMessage(messageCode.getMessageKey(), null, LocaleContextHolder.getLocale()); } /** * @param data - 응답 데이터 * @param messageCode - 응답 메시지 코드 * @return 성공 응답 결과 * * 성공 응답 생성 */ public ResponseEntity successRes(Object data, MessageCode messageCode) { ResponseData responseData = new ResponseData(); responseData.setStatus(messageCode.getStatus().value()); responseData.setStatusText(messageCode.getStatus()); responseData.setMessage(getMessage(messageCode)); responseData.setData(data); return new ResponseEntity<>(responseData, createHeaders(), HttpStatus.OK); } /** * @param status - HTTP 상태 코드 * @param message - 에러 메시지 * @return 에러 응답 결과 * * 에러 응답 생성 */ public ResponseEntity errorRes(HttpStatus status, String message) { ResponseData responseData = new ResponseData(); responseData.setStatus(status.value()); responseData.setStatusText(status); responseData.setMessage(message); return new ResponseEntity<>(responseData, createHeaders(), status); } /** * @param messageCode - 응답 메시지 코드 * @return 에러 응답 결과 * * 에러 응답 생성 */ public ResponseEntity errorRes(MessageCode messageCode) { return errorRes(messageCode, ""); } /** * @param messageCode - 응답 메시지 코드 * @param addMessage - 추가 메시지 * @return 에러 응답 결과 * * 에러 응답 생성 */ public ResponseEntity errorRes(MessageCode messageCode, String addMessage) { ResponseData responseData = new ResponseData(); responseData.setStatus(messageCode.getStatus().value()); responseData.setStatusText(messageCode.getStatus()); responseData.setMessage(getMessage(messageCode) + (addMessage != null ? addMessage : "")); return new ResponseEntity<>(responseData, createHeaders(), messageCode.getStatus()); } }