-
Notifications
You must be signed in to change notification settings - Fork 0
11. How to route based on Annotation
이진혁 edited this page May 28, 2021
·
3 revisions
웹플럭스에서는 기존 Spring MVC
방식에서 채택한 어노테이션 기반 라우팅 방식을 그대로 사용하기 위해서
어노테이션 기반 라우팅 방식과 RouterFunction
기반 라우팅 방식 모두를 지원합니다.
그 중 이번에는 어노테이션 기반 라우팅 방식을 이용해 서비스를 구성해보겠습니다.
@RestController
@RequiredArgsConstructor
public class AnnotatedTestController {
private final AnnotatedTestService testService;
@PostMapping("/hello")
public Mono<AnnotatedTestResponse> testController(@RequestBody Mono<AnnotatedTestRequest> request) {
return request
.flatMap(req -> Mono.just(
new AnnotatedTestResponse(
testService.combineName(req.getFirstName(), req.getLastName()),
req.getAge(),
testService.combineGradeClassNumber(req.getGrade(), req.getClassroom(), req.getNumber())
)
));
}
}
위 컨트롤러처럼 기존 방식과 다를바 없는 컨트롤러를 구성할 수 있습니다.
기존과 다른 점을 찾아보자면 Request Body
와 Response Body
를 Mono
로 감쌌다는 것인데,
이는 어떤 Publisher
로도 감쌀 수 있으며 Asynchronous
하게 처리하기 위함입니다.
당연히
Flux
로도 감쌀 수 있지만Flux
로 감싸게 되면JSON Object
가 아니라
JSON Array
가 되기 때문에 보통 사용하지 않습니다.
@Service
public class AnnotatedTestService {
public String combineName(String firstName, String lastName) {
return lastName + firstName;
}
public String combineGradeClassNumber(int grade, int classroom, int number) {
return String.format("%d%d%d", grade, classroom, number);
}
}
서비스 컴포넌트는 기존과 다른 점이 없습니다.
하지만 레포지토리 컴포넌트는 주의사항이 있습니다.
평소 사용하던 JDBC
는 Blocking
을 기본으로 하는 드라이버이기 때문에
JDBC
를 그대로 사용하게 되면 웹플럭스의 이점을 제대로 사용할 수 없습니다.
그래서 자바 진영에서 지원하는 R2DBC
에 대해 공부하고 적용시켜야 합니다.