Response Sample

  • 위와 같은 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();
	}
}