GET /example/user/{userId}/orders/{orderId}
@Slf4j
@RestController
public class MappingController {
@GetMapping("/mapping/{userId}/orders/{orderId}")
public String mappingMultiPath(
@PathVariable String userId,
@PathVariable Long orderId
) {
log.info("mappingMultiPath userId={} orderId={}", userId, orderId);
return "ok";
}
}
{userId}
로 되어있는 식별자를 받아오기 위해서 사용된다.@PathVariable("pathValueName") [Type] [name]
@PathVariable String userId
Query String
GET /example?username=새우&age=27
HTML Form
POST /example
username=새우&age=27
Query String와 HTML Form의 형식이 동일하여 Spring에서 파싱할 때 동일한 로직으로 작동한다.
@Slf4j
@RestController
public class RequestParamController {
@RequestMapping("/request-param")
public String requestParam(
@RequestParam String username,
@RequestParam int age,
@RequestParam Map<String, Object> paramMap
) {
log.info("username = {}, age = {}", username, age);
log.info("username = {}, age = {}",
paramMap.get("username"), paramMap.get("age"));
return "ok";
}
}
@RequestParam("requestValueName") [Type] [name]
@Slf4j
@RestController
public class RequestModelParamController {
@RequestMapping("/model-attribute")
public String modelAttribute(
@ModelAttribute HelloData helloData
) {
log.info("username = {}, age = {}", helloData.getUsername(), helloData.getAge());
return "ok";
}
}
@ModelAttribute("requestValueName") [Object] [name]
BindException
이 발생한다.POST /example
Hello Spring
POST /example
{
"username": "새우",
"age": 27
}
@Slf4j
@RestController
public class RequestBodyController {
/**
* 일반 텍스트 요청 처리
*/
@PostMapping("/request-body-string")
public String requestBodyString(
HttpEntity<String> httpEntity
) throws IOException {
log.info("messageBody = {}", httpEntity.getBody());
return "echo: " + messageBody;
}
/**
* JSON 요청 처리
*/
@PostMapping("/request-body-json")
public String requestBodyJson(
HttpEntity<HelloData> data
) throws IOException {
log.info("data = {}", data.getBody().toString());
return data;
}
}
HttpMessageConverter
를 통해 HttpEntity
로 변환된다.StreamUtils.copyToString
objectMapper.readValue
getBody()
메서드를 통해 직접 조회가 가능하다.HttpEntity
를 상속받은 자식 객체들은 다음과 같은 기능을 제공한다.RequestEntity
ResponseEntity
@Slf4j
@RestController
public class RequestBodyController {
/**
* 일반 텍스트 요청 처리
*/
@PostMapping("/request-body-string")
public String requestBodyString(
@RequestBody String messageBody
) throws IOException {
log.info("messageBody = {}", messageBody);
return "echo: " + messageBody;
}
/**
* JSON 요청 처리
*/
@PostMapping("/request-body-json")
public String requestBodyJson(
@RequestBody HelloData data
) throws IOException {
log.info("data = {}", data.toString());
return "echo: " + data.toString();
}
}
@RequestBody [Type] [name]
HttpMessageConverter
를 통해 HttpEntity
로 변환된다.StreamUtils.copyToString
objectMapper.readValue
@RequestBody
를 생략하는 경우, Spring은 다음의 규칙을 적용한다.@RequestParam
@ModelAttribute