크게 3가지가 있다.
Query Parameter,HTTP Form Data,HTTP Request Body
?key=value&key2=value2@GetMapping("/search")
public String search(@RequestParam String keyword) {
return "검색어: " + keyword;
}
@Slf4j
@Controller
public class RequestParamController {
@GetMapping("/request-params")
public void params(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
log.info("key1Value={}, key2Value={}", key1Value, key2Value);
response.getWriter().write("success");
}
}
response.getWriter().write()POST /form-data
content-type: application/x-www-form-urlencoded
key1=value1&key2=value2
@RequestParam or @ModelAttribute 로 데이터 받음@PostMapping("/login")
public String login(
@RequestParam String username,
@RequestParam String password) {
return "로그인 시도: " + username;
}
@Slf4j
@Controller
public class RequestBodyController {
@PostMapping("/form-data")
public void requestBody(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String key1Value = request.getParameter("key1");
String key2Value = request.getParameter("key2");
log.info("key1Value={}, key2Value={}", key1Value, key2Value);
response.getWriter().write("success");
}
}
@RestController 에서 사용되며, 대부분 JSON 형식으로 데이터를 전달한다.@Getter
@Setter
public class Board {
private String title;
private String content;
}
@PostMapping("/users")
public String createUser(@RequestBody User user) {
return "사용자 생성: " + user.getName();
}
@Slf4j
@Controller
public class RequestBodyController {
// JSON을 Java 객체로 변환해주는 Jackson 라이브러리
private ObjectMapper objectMapper = new ObjectMapper();
@PostMapping("/request-body")
public void requestBody(
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("messageBody={}", messageBody);
Board board = objectMapper.readValue(messageBody, Board.clss);
log.info("board.getTitle()={}, board.getContent()={}", board.getTitle(), board.getContent());
response.getWriter().write("success");
}
}
@RequestParam 을 이용해 데이터를 받음application/x=www-form-urlencoded 형식으로 전송@RequestParam or @ModelAttribute 을 이용해 데이터를 받음multipart/form-data 로 따로 처리해야 함application/json (기본값) 사용@RequestBody 를 이용해 데이터를 받음@RequestBody 를 사용할 때는 JSON을 객체로 매핑해야 함 ObjectMapper 활용| 방식 | HTTP 메소드 | 데이터 전송 방식 | 언제 씀? |
|---|---|---|---|
| GET + 쿼리 파라미터 | GET | URL에 포함 | 조회, 검색 등 간단한 요청 |
| POST + HTML Form | POST | Body에 key=value 형태로 저장 | 간단한 폼 데이터 (로그인, 회원가입 등) |
| HTTP Request Body | POST/PUB/PATCH | Body에 JSON 포함 | 복잡한 데이터 전송, REST API |
Spring 입문 - 5주차