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