본문 바로가기
Spring

Controller / DTO

by KDW999 2023. 3. 5.

Controller

ㅡ MVC 디자인 패턴에서 Controller에 해당

ㅡ View와 Model의 접점

ㅡ Client의 Request에 따라 모델의 상태 변경

ㅡ Request URL의 end point에 해당하는 메서드 실행

ㅡ End point에 대한 Routing을 담당

ㅡ Service의 결과를 Client에게 Response

 

*Controller는 베이스 패키지에 생성

 

@RestController

ㅡ JSON 형태의 Response를 반환하기 위한 Controller임을 명시

ㅡ REST API 개발을 위해 사용

ㅡ @Controller + @ResponseBody의 형태

* react의 route와 비슷?

 

@GetMapping(path)

ㅡ REST API의 GET method를 이용한 Request 중 'path'에 해당하는 end-point에 대한 라우팅 담당

ㅡ HTTP 메서드 중 GET 방식의 요청에 대한 처리를 지정할 때 사용

 

@RequestMapping(pattern)

ㅡ Request URL에서 특정 패턴 Request를 담당하는 Controller임을 명시

ㅡ 해당 클래스를 특정 Request URL 패턴에서 사용하도록 지정

 

@PostMapping(Path)

ㅡ REST API의 Post method를 이용한 Request 중 'path'에 해당하는 end-point에 대한 라우팅 담당

→ (같은 말) HTTP 메서드 중 POST 방식의 요청에 대한 처리 지정

ㅡ 브라우저 상에선 GET 방식만 가능하기에 POST 방식은 postman을 설치 후 서버 실행시키고 사용

 

++

@PutMapping(path) / @PatchMapping(path) / @DeleteMapping(path)

 

@PathVariable(path)

ㅡ https://host:port/path/{data} 형태로 데이터를 받아오기 위한 어노테이션 / path의 일종으로 필수 입력

ㅡ GET / DELETE 방식에서 사용

ㅡ URL Path로 클라이언트로 부터 데이터를 받아서 변수로 사용 / {}안 이름과 PathVariable 안에 이름은 같아야 한다.

 

@Autowired

ㅡComponent 등록이 되어있는 클래스의 생성 작업을 스프링이 처리

 

@RequestBody

ㅡ JSON 형태의 Request Body 데이터를 Java 객체로 변환해주는 어노테이션

 

//? 해당 클래스 REST API로 사용되는 Controller로 지정할 수 있음
//? Controller = react의 route와 비슷
@RestController

//? 해당 클래스를 특정 Request URL 패턴에서 사용하도록 지정
@RequestMapping("apis") //? 먼저 사용?
public class MainController {

	//? @Autowired
	//? @Component 등록이 되어 있는 클래스의 생성 작업을 스프링이 알아서 처리
	@Autowired 
	private MainService mainService;
	
	//? HTTP 메서드 중 GET 방식의 요청에 대한 처리를 지정할 때 사용
	@GetMapping("/")
	public ResponseDto<String> getMain() {
		ResponseDto<String> result = mainService.getMain();
		return result;
	}
	
	//? PathVariable(path) : GET / DELETE 방식에서 사용할 수 있음
	//?                    URL Path로 클라이언트로부터 데이터를 받아서 변수로 사용할 수 있게 함
	@GetMapping("/variable/{data}") //? 중괄호 안 이름과 PathVariable 안에 이름은 같아야 한다.
	public ResponseDto<String> getVariable(@PathVariable("data") String data) {
		ResponseDto<String> result = mainService.getVariable(data);
		return result;
	}
	
	//? HTTP 메서드 중 POST 방식의 요청에 대한 처리 지정
	//? 브라우저 상에선 GET 방식만 가능 → Post 방식은 postman 다운받아서 사용 (사용하려는 서버 켜져 있어야 됨)
	@PostMapping("/")
	public ResponseDto<String> postMain() {
		ResponseDto<String> result = mainService.postMain();
		return result;
	}

	//? @RequestBody : POST / PATCH 방식에서 사용할 수 있음
	//??              클라이언트로 부터 request body로 데이터를 받고자 할 때 사용
	@PostMapping("/requestBody")
	public ResponseDto<String> postRequestBody(@RequestBody String data ) {
		ResponseDto<String> result = mainService.postRequestBody(data);
		return result;
	}
	
	//? HTTP 메서드 중 PATCH 방식의 요청에 대한 처리를 지정할 때 사용
	@PatchMapping("/")
	public ResponseDto<String> patchMain() {
		ResponseDto<String> result = mainService.patchMain();
		return result;
	}
	
	//? HTTP 메서드 중 DELETE 방식의 요청에 대한 처리를 지정할 때 사용
	@DeleteMapping("/")
	public ResponseDto<String> deleteMain() {
		ResponseDto<String> result = mainService.deleteMain();
		return result;
	}
	
	//? request body 혹은 response body로 객체를 담을 때는 Dto를 사용해서 전송 혹은 수신
	@PostMapping("/test")
	public ResponseDto<String> postTest(@Valid @RequestBody PostTestRequestDto requestBody) {
		ResponseDto<String> result = mainService.postTest(requestBody);
		return result;
	}
	
	@GetMapping("/test")
	public ResponseDto<GetTestResponseDto> getTest() {
		ResponseDto<GetTestResponseDto> result = mainService.getTest();
		return result;
	}
}

 

 

DTO

ㅡ Data Transfer Object

ㅡ 계층 간 데이터 전송을 위한 객체

ㅡ getter / setter / toString 메서드를 포함하고 있는 클래스

 

++ 

@Data

ㅡ @Getter, @Setter, @ToString 등 여러 어노테이션이 합쳐진 어노테이션

 

@NoArgsConstructor

ㅡ 매개변수가 없는 생성자를 작성해주는 어노테이션

 

@AllArgsConstructor

ㅡ 모든 멤버변수를 매개변수로 받는 생성자를 작성해주는 어노테이션

'Spring' 카테고리의 다른 글

JPA  (0) 2023.03.06
Service  (0) 2023.03.06
Spring 개발환경 세팅 (이클립스, VSCode) / Build, Gradle  (2) 2023.03.03
DI & IoC  (0) 2023.03.03
Spring 프레임워크  (0) 2023.02.28

댓글