study-spring-framework / spring-mvc

0 stars 0 forks source link

HTTP 데이터를 객체로 처리하는 방법 (강의 1 -15) #6

Open uiseongsang opened 1 year ago

uiseongsang commented 1 year ago

ModelAttribute

Body 부분에 데이터가 객체로 처리할 수 있는 방법 - @ModelAttribute 어노테이션 -> body에 들어온 데이터를 객체에 매핑해서 가져올수 있다

Query String 데이터도 object 객체로 Spring 내부에서 바꿔준다

나중에 Query String으로 ? 달고 &으로 많은 데이터가 넘어온다고 가정했을 때 함수 파라미터에 전부 @Requestparam으로 다 받기에는 코드의 복잡성, 유지보수의 어려움이 있어서 즉, 부담이 가기 떄문에 객체로 한 번에 받을 수 있도록 @ModelAttribute 사용합니다.

주의사항 데이터를 받아올 때는 Setter Or 오버로딩된 생성자가 꼭 필요합니다 없으면 가장 기초 초기화된 값을 받는다 string이면 null, int이면 0

@ModelAttribute 어노테이션 생략해도 Spring에서 알아서 돌려준다!

https://github.com/study-spring-framework/spring-mvc/blob/d9624d766f38e7e1fed62fd72be3876ffb46a003/src/main/java/com/sparta/springmvc/request/RequestController.java#L45-L63

@ModelAttribute도 RequestParam처럼 생략이 가능하다.

Spring은 어떻게 어노테이션을 생략해도 알수 있을까??

Spring은 해당 파라미터가 SimpleValueType(int같은 원시 타입, wrapper, Date)이면 @RequestParam으로 간주를 하고 아니라면 @ModelAttribute가 생략이 되었다고 판단을 합니다.

RequestBody

스프링에서 비동기 처리를 하는 경우 @RequestBody를 사용한다

https://github.com/study-spring-framework/spring-mvc/blob/d9624d766f38e7e1fed62fd72be3876ffb46a003/src/main/java/com/sparta/springmvc/request/RequestController.java#L65-L75

Http Body 부분에 JSON 형식으로 데이터가 넘어왔을 떄에 해당 JSON을 처리하기 위해서는 그 데이터를 처리를 할만한 class를 만들어서 파라미터에 넣어주고 그 앞에 @RequestBody를 꼭 달아줘야 한다.

uiseongsang commented 1 year ago

@RequestBody 나 @ModelAttribute를 사용해서 데이터를 처리 하는데 그떄 처리하는 객체를 DTO 객체로 사용

image

DTO(Data Transfer Object) - 데이터 전송 및 이동을 위해 생성되는 객체

Request의 데이터를 처리할 때 사용되는 객체는 RequestDto, Response를 할 때 사용되는 객체는 ResponseDto라는 이름을 붙여 DTO 클래스를 만들 수 있다.