/user/{id}
/{id}와 같이 URI의 경로로 넘어오는 값을 변수로 받을 수 있음@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/pathVariable/{id}")
public String pathVariableTest(@PathVariable Long id){
return id.toString();
}
}
http://localhost:8080/test/pathVariable/{id}
로 Get 요청을 보내면 {id} 값을 얻을 수 있음.
@PathVariable("userId")
처럼 지정해 줄 수 있음.@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/pathVariable/{userId}")
public String pathVariableTest(@PathVariable("userId") Long id){
return id.toString();
}
}
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/pathVariable/{userId}/{orderId}")
public String pathVariableTest(@PathVariable("userId") Long uid, @PathVariable("orderId") Long oid){
return "userId = " + uid + " orderId = " + oid;
}
}
?id={id}
와 같이 요청 파라미터로 넘어오는 값을 받을 수 있음.@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/requestParam")
public String requestParamTest(@RequestParam Long id){
return id.toString();
}
}
근데
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/requestParam")
public String requestParamTest(@RequestParam(required=false, defaultValue = "123456789") Long id){
return id.toString();
}
}
클라이언트에서 서버로 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아 서버로 보내면 서버에서 @RequestBody 어노테이션을 사용해 HTTP 요청 본문에 담긴 값들을 자바 객체로 변환시켜 객체에 저장.
@Builder
@Getter
public class TestDTO {
private int id;
private String message;
public TestDTO(int id, String message) {
this.id = id;
this.message = message;
}
}
@RestController
@RequestMapping("/test")
public class TestController {
@PostMapping("/requestBody")
public ResponseEntity<TestDTO> requestBodyTest(@RequestBody TestDTO dto){
return ResponseEntity.ok(dto);
}
}
Post? Get?
Post로는 Body에 Json으로 요청하는 것이 일반적이고 또 이런 경우 Restful Semantics이라는 표현을 쓰는데, Rest Api에서는 의미론적으로 Get에 Body를 담아버리면 Api의 의도를 파악하기가 어려울 수 있기 때문에 Post는 Post 답게 Get은 Get 답게 쓰는 것을 권장한다.
@Builder
@Getter
public class TestDTO {
private int id;
private String message;
public TestDTO(int id, String message) {
this.id = id;
this.message = message;
}
}
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/responseBody")
public ResponseEntity<TestDTO> responseBodyTest(){
TestDTO dto = TestDTO.builder()
.id(123456789)
.message("Hello world!")
.build();
return ResponseEntity.ok(dto);
}
}