Spring boot @Controller, @RestController, @RequestParam, @PathVariable, @RequestBody

Goofi·2023년 8월 9일
0
post-custom-banner

Annotaion

Java 소스코드에 추가적인 정보를 제공하는 방법.
@으로 시작하며 클래스, 메소드, 멤버변수, 파라미터 등에 부착 가능.

@Controller

view를 응답(html 파일 등)

@RestController

data를 응답(문자열, Json, xml 등)

@RequestMapping

RequestMapping이 붙어 있는 메소드는 Client의 특정 요청이 왔을 때 Spring Framework에 의해 호출된다.

@RequsetMapping(value="/hello")

@RequestParms

Query String의 활용

  • name : query string의 key, key와 변수명이 같을 경우 생략 가능
  • required : 필수 여부
  • defaultValue : 데이터가 없을 경우 기본 값
@RequsetParam(name = "category", required = false, defaultValue = "it") String catefory

URI에 이어지는 ‘?’ 뒤에 key1=value1&key2=value2&... 형태로 작성

@RequsetMapping(value= "/post")
public String getPost(@RequestParam(name="category") String category, @RequestParam(name = "id") Integer id) {
	return "You requested " + category + "_" + id + " post";
}

http://localhost:8080/post?category=it&id=10

@PathVariable

Path Parameter의 활용
@RequestMapping value URI에 {}로 Path Param임을 표시

@RequestMapping(value = "/user/{type}/id/{id}")
public String getUser(@PathVariable(name="type") String type, @PathVariable(name = "id") Integer id){
	return "You requested " + type + "_" + " user";
}

http://localhost:8080/user/admin/id/100

Query String vs Path Parameter

일반적인 추천 사항

  • 특정 자원을 요청 하는 경우는 Path Param을, 정렬이나 추가 필터링을 위한 데이터는 Query String 사용
  • https://codepresso.kr/courses/spring?order=latest
    필수 데이터는 Path Param으로 선택적 데이터는 Query String 사용
  • Path Param이 포함 된 URI는 Client가 영향을 받기 때문에 변경 비용 높음
  • Query String은 상대적으로 편하게 확장 가능

@RequestBody

Client에서는 JSON 데이터를 전송하고, Spring에서는 JSON 데이터를 Java 객체 파라미터로 저장

Requst JSON Data

{
	"id" : 1,
  	"title" : "hello",
  	"content" : "nice to meet you",
  	"username" : "dhlee"
}

Code

@PostMapping
public String savePost(@RequestBody PostDto postDto){
	system.out.println(postDto.getId());
	system.out.println(postDto.getTitle());
	system.out.println(postDto.getContent());
	system.out.println(postDto.getUsername());
  	return "POST /post";
}
public class PostDto{
	Integer id;
    String title;
    String content;
    String username;
}

console

1
hello
nice to meet you
dhlee
profile
오늘보단 내일이 강한 개발자입니다!🧑🏻‍💻
post-custom-banner

0개의 댓글