controller 패키지
▪ 클라이언트가 입력한 값에 대한 응답을 수행하는 코드들이 담기는 패키지
▪ 모든 요청은 컨트롤러를 통해서 진행되어야 한다.
기본적인 controller 클래스 작성 방법
우선 스프링에게 해당 클래스가 Controller로 동작한다는 것을 인식하게끔
우리는 어노테이션"@"을 달아줘야 한다.
▪ @RestController 어노테이션을 클래스 상단에 작성해준다.
➡️ RestController가 궁금하다면..여기로
GetMapping
▪ 매개변수가 없을 경우
@GetMapping(value = "/hello")
public String getName(){
return "getName called!";
}
▪ @Path Variable을 사용할 경우
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable (name = "variable") String variable){
return variable;
}
▪ @RequestParam을 사용할 경우
쿼리 형식으로 값을 전달하는 방식으로, ?를 기준으로 우측에 {키}={값} 형태로 요청을 전송한다.
여러개의 값을 전달할 경우 "&"로 연결한다.
▪ Param으로 어떤 값이 들어올지 명확하게 알고 있을 경우
@GetMapping(value = "/request1")
public String getRequestParam1(
@RequestParam (name = "name") String name,
@RequestParam (name = "email") String email,
@RequestParam (name = "organization") String organization
){
return name + " " + email + " " + organization;
}
▪ Param으로 어떤 값이 들어올지 모를 경우
@GetMapping(value = "/request2")
public String getRequestParam2(
@RequestParam Map<String, String> param
){
StringBuilder sb = new StringBuilder();
param.forEach(
(key, value) -> sb.append(key).append(" ").append(value).append("\n")
);
return sb.toString();
}
▪ DTO 객체를 이용한 GET메서드 구현
➡️ DTO란?
: Data Transfer Object의 약자로, 다른 레이어 간의 데이터 교환에 사용되는 데이터 객체이다.
▪ DTO는 데이터를 교환하는 용도로만 사용하는 객체이기 때문에,
DTO에는 별도의 로직이 포함되지 않는다.
▪ GetMapping시, DTO 클래스에 선언된 필드는 컨트롤러의 메서드에서 쿼리 파라미터의 "키"와 매핑된다.
▪ 따라서 쿼리스트링의 키가 정해져 있지만, 받아야 할 파라미터가 많을 경우,
DTO를 활용하여 가독성을 높일 수 있다.
<MemberDto.java>
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MemberDto {
private String name;
private String email;
private String organization;
}
<GetMapping>
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto){
return memberDto.getName() + " " + memberDto.getEmail() +
" " + memberDto.getOrganization();
}
출처 : 스프링 부트 핵심 가이드, 장정우 지음
'Programming > Spring' 카테고리의 다른 글
[Spring] - 스프링 (gradle) springdoc으로 Swagger3 추가하기 (0) | 2024.02.06 |
---|---|
[Spring] - 스프링부트 API 작성 방법 : Post, Put, Delete Mapping (0) | 2024.02.06 |
[Spring] - Controller vs RestController (0) | 2024.02.04 |
[Spring] IntelliJ 커뮤니티로 스프링 부트 프로젝트 생성하기 (feat. gradle 사용) (0) | 2024.02.01 |
[Spring] Spring 프레임워크의 특징 (0) | 2024.01.24 |