728x90
서버 -> 클라이언트한테 데이터를 전달하는 방법
1. 응답용 DTO 생성
응답용 DTO 클래스를 만들고 객체를 생성해서
객체의 변수에 값을 저장하고 컨트롤러의 메소드가 returm 해주면 알아서 json 형태로 변경해준다.
응답용 DTO
public class ResponseDto {
private int id;
private String name;
private String message;
// getter, setter 생략
}
@RestController
@RequestMapping("/test04")
public class Test04Controller {
@GetMapping("ex01")
public ResponseDto ex01() {
ResponseDto responseDto = new ResponseDto();
responseDto.setId(1);
responseDto.setName("test01");
responseDto.setMessage("zzzzz");
return responseDto;
}
}
2. ResponseEntity 사용
단순 DTO만 사용하면 HTTP 응답 코드를 제어할 수 없다. => 따라서 ResponseEntity를 함께 사용한다.
ResponseEntity로 응답 코드를 제어할 수 있다.
@GetMapping("/ex02")
public ResponseEntity<ResponseDto> ex02() {
ResponseDto responseDto = new ResponseDto();
responseDto.setId(1);
responseDto.setName("test01");
responseDto.setMessage("zzzzz");
return ResponseEntity.status(500).body(
responseDto
);
}
3. BaseResponse 사용
여러 요청에 대해서 일관된 양식으로 응답을 주고 싶다면 BaseResponse 같은 방식을 사용할 수 있다.
BaseResponseGeneric
public class BaseResponseGeneric<T> {
private int code;
private String message;
private T results;
public BaseResponseGeneric(int code, String message, T results) {
this.code = code;
this.message = message;
this.results = results;
}
public static <T> BaseResponseGeneric<T> success(T results) {
return new BaseResponseGeneric<>(20000, "요청 성공", results);
}
public static <T> BaseResponseGeneric<T> error(int status, String message) {
return new BaseResponseGeneric<>(status, message, null);
}
// getter, setter 생략
}
컨트롤러
// success
@GetMapping("/ex03")
public ResponseEntity<BaseResponseGeneric<ResponseDto>> ex03() {
ResponseDto responseDto = new ResponseDto();
responseDto.setId(3);
responseDto.setName("test03");
responseDto.setMessage("zzzzzz");
return ResponseEntity.ok(
BaseResponseGeneric.success(responseDto)
);
}
// error
@GetMapping("/ex04")
public ResponseEntity<BaseResponseGeneric<ResponseDto>> ex04() {
ResponseDto responseDto = new ResponseDto();
responseDto.setId(3);
responseDto.setName("test03");
responseDto.setMessage("zzzzzz");
return ResponseEntity.status(500).body(
BaseResponseGeneric.error(300002, "그런 에러가 났어요")
);
}
4. 상속 사용
상속을 사용해서 응답 데이터를 전달한다.
제네릭을 쓰면 상속이 되지 않기 때문에 제네릭을 사용하지 않는다.
BaseResponseExtends
public class BaseResponseExtends {
private int code;
private String message;
}
BaseResponseExtends를 상속 받아 사용한다.
public class Test04Res extends BaseResponseExtends {
int idx;
String email;
}
@GetMapping("/ex05")
public ResponseEntity<BaseResponseExtends> ex05() {
BaseResponseExtends response = new Test04Res();
response.setCode(20000);
response.setMessage("정상");
return ResponseEntity.ok(response);
}
728x90
'BE > Spring Boot' 카테고리의 다른 글
[Spring Boot] Repository 메서드 생성 규칙 (findAll, findBy) (0) | 2025.02.07 |
---|---|
[Spring Boot] JPA란? / JPA 구성 요소(Entity, Repository) / JPA로 DB 다루기 (1) | 2025.02.06 |
[Spring Boot] 클라이언트 -> 서버로 데이터 전달 (RequestMapping) (0) | 2025.02.05 |
[Spring Boot] IntelliJ에서 스프링 부트 프로젝트 생성 / 초기 설정 (0) | 2025.02.05 |
[Spring Boot] Controller와 RestController 차이 (0) | 2025.02.05 |