- 위와 같은 json 응답을 나타내보자
- 노란 부분 : 응답마다 공통되는 Response 공통부
- 초록 부분 : json body이므로 응답마다 달라짐
Controller에서 CRUD에 대한 API 작성
//com/example/study/controller/api/UserApiController.java
@RestController
@RequestMapping("/api/user")
public class UserApiController implements CrudInterface {
@Override
@PostMapping("") // /api/user
public Header create() {
return null;
}
@Override
@GetMapping("{id}") // /api/user/{id}
public Header read(@PathVariable Long id) {
return null;
}
@Override
@PutMapping("") // /api/user
public Header update() {
return null;
}
@Override
@DeleteMapping("{id}") // /api/user/{id}
public Header delete(@PathVariable Long id) {
return null;
}
}
- CrudInterface는 REST API에서 CRUD 메소드 작성을 강제하기 위한 인터페이스이다.
//com/example/study/ifs/CrudInterface.java
public interface CrudInterface {
Header create(); //매개변수는 추후에 추가
Header read(Long id);
Header update();
Header delete(Long id);
}
Response 공통부 작성
//com/example/study/model/network/Header.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
//@JsonInclude(value = Include.CUSTOM) //어떤 값들만 include 할 건지 설정할 수 있음
public class Header<T> {
//api 통신 시간
private LocalDateTime transactionTime;
//api 응답 코드
private String resultCode;
//api 부가 설명
private String description;
//json body
private T data;
/**
* 정상적인 통신
* @param <T>
* @return
*/
public static <T> Header<T> OK(){
return (Header<T>) Header.builder()
.transactionTime(LocalDateTime.now())
.resultCode("OK")
.description("OK")
.build();
}
/**
* 데이터를 받는 OK
* @param <T>
* @param data
* @return
*/
public static <T> Header<T> OK(T data){
return (Header<T>) Header.builder()
.transactionTime(LocalDateTime.now())
.resultCode("OK")
.description("OK")
.data(data)
.build();
}
/**
* 설명을 가지고 있고 데이터가 없는 에러
* @param <T>
* @param description
* @return
*/
public static <T> Header<T> ERROR(String description){
return (Header<T>) Header.builder()
.transactionTime(LocalDateTime.now())
.resultCode("ERROR")
.description(description)
.build();
}
}