본문 바로가기

Spring

Controller 추상화

반응형

 

 

Controller 추상화

지금까지 CRUD 제작 시

@GetMapping ,@PostMapping 등 모든 작업에 직접 어노테이션을 
달아가면서 제작했는데, 개발자가 이런 어노테이션을 까먹을 수도 있고
여러 상황이 발생함. -> 방지 목적

interface를 매번 상속받고 매번 직접 구현하기 보다 


해당 interface를 상속받은 추상클래스를 하나 만들고 (로직 구현은 당연히 안되어 있는 상태) 
public한 Interface를 return하도록 한 뒤에  원하는 Entity의 Controller에서 해당 추상클래스를 extends하여  추상클래스에서 return시키고 있는 interface를 자신의 logicservice로 치환하도록 함.


치환하는 것은 해당 Entity의 컨트롤러가 생성되는 시점에 되어야 하므로
@PostConstruct 어노테이션을 통해 그렇게 되도록 함수를 짜주도록 함.

 

1. 인터페이스를 상속 받는 추상 클래스 생성

-> interface를 반환하도록 설계.

 

public abstract class CrudController<Req,Res> implements CrudInterface<Req,Res> {


protected CrudInterface<Req,Res> baseService;

@Override
@PostMapping("")
public Header<Res> create(@RequestBody Header<Req> request) {
return baseService.create(request);
}

@Override
@GetMapping("{id}")
public Header<Res> read(@PathVariable Long id) {
return baseService.read(id);
}

@Override
@PutMapping("")
public Header<Res> update(@RequestBody Header<Req> request) {
return baseService.update(request);
}

@Override
@DeleteMapping("{id}")
public Header delete(@PathVariable Long id) {
return baseService.delete(id);
}
}

 

2. 원하는 Entity의 controller에서 해당 추상 클래스를 상속받고 자신의 logicService로 반환되는 interface를 치환 시킴.

 

@RestController
@RequestMapping("/api/item")
public class ItemApiController extends CrudController<ItemApiRequest, ItemApiResponse> {


@Autowired
private ItemApiLogicService itemApiLogicService;


@PostConstruct
public void init()

{
this.baseService = itemApiLogicService;
}

}

반응형

'Spring' 카테고리의 다른 글

orderInfo 구현  (0) 2019.11.18
페이징 처리  (0) 2019.11.18
Code Refactoring : JPA Enum 형태 관리  (0) 2019.11.17
CRUD Logic 구현  (0) 2019.11.17
@Slf4j  (0) 2019.11.14