728x90
회사 업무를 진행하면서 html의 <form></form> 이란 것을 처음 알게 되었고 여러 프로젝트에 참여하면서 form으로 전달되는 데이터를 받는 방식이 제각각이었기에 어떤 것들이 있는지 한번 정리해보기로 했다.
목차
- 프로젝트 설정
- html 코드
- Java 코드
- HttpServletRequest로 데이터 받기
- Request Params로 데이터 받기
- HashMap으로 데이터 받기
- 객체로 데이터 받기
※ 프로젝트 실행 후 테스트 시 보여지는 화면에는 별다른 변화가 없고 스프링의 로그를 통해 결과값을 확인할 수 있습니다.
1. 프로젝트 설정
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
2. html 코드
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<div class="container">
<form id="frm" method="post" action="/form">
<div class="mb-3">
<label for="name" class="form-label">이름</label>
<input type="text" class="form-control" id="name" name="name">
</div>
<div class="mb-3">
<label for="fruit" class="form-label">좋아하는 과일</label>
<input type="text" class="form-control" id="fruit" name="fruit">
</div>
<button type="submit" class="btn btn-primary">제출</button>
</form>
</div>
</body>
</html>
프로젝트 실행 시 깔끔하게 보기 위해서 BootStrap 5를 적용해서 코드가 좀더 길어졌는데 그건 중요하지 않고 눈여겨 봐야할 곳은 <form> 태그 속 <input>의 "name"이다. 해당 name으로 파라미터들을 매핑하니 코드를 수정한다면 name은 기억해두자.
3-1. HttpServletRequest로 데이터 받기
@Slf4j
@Controller
public class FormController {
@PostMapping("/form")
public String formByHttpServletRequest(HttpServletRequest httpServletRequest) {
String name = httpServletRequest.getParameter("name");
String fruit = httpServletRequest.getParameter("fruit");
log.info("formByHttpServletRequest");
log.info(String.format("form-data ===> {name=%s, fruit=%s}", name, fruit));
return "redirect:/";
}
}
HttpServletRequest을 이용하여 파라미터를 가져올 때는 컨트롤러의 입력 받는 변수에 HttpServletRequest를 선언해준 뒤 매서드내에서 getPatameter(name)으로 가져오면된다.
3-2. Request Params로 데이터 받기
@Slf4j
@Controller
public class FormController {
@PostMapping("/form")
public String formByRequestParams(@RequestParam(value = "name") String name,
@RequestParam(value = "fruit") String fruit) {
log.info("formByRequestParams");
log.info(String.format("form-data ===> {name=%s, fruit=%s}", name, fruit));
return "redirect:/";
}
}
3-3. HashMap으로 데이터 받기
@Slf4j
@Controller
public class FormController {
@PostMapping("/form")
public String formByHashMap(@RequestParam HashMap<String, Object> formData) {
log.info("formByHashMap");
log.info("form-data ===> " + formData);
return "redirect:/";
}
}
HashMap으로 데이터를 가져올 때 주의할 점은 @RequestParam을 붙여주지 않으면 값을 가져오지 못한다는 것이다.
3-4. 객체로 데이터 받기
// FormData.java
@Getter
@Setter
public class FormData {
private String name;
private String fruit;
public String toString() {
return "{" +
"name=" + name + ", " +
"fruit=" + fruit +
"}";
}
}
// Controller.java
@Slf4j
@Controller
public class FormController {
@PostMapping("/form")
public String formByDTO(FormData formData) {
log.info("formByDTO");
log.info("form-data ===> " + formData.toString());
return "redirect:/";
}
}
정확히는 @ModelAttribute 를 통해 받은 데이터들을 객체로 바인딩 시켜서 가져온다는 표현이 맞겠지만 @ModelAttribute은 생략도 가능하고 개인적으로 객체만 선언해놔도 알아볼 수 있다고 생각하기에 이 편이 더 깔끔하다고 생각한다.
'코딩 공부 > SpringBoot' 카테고리의 다른 글
spring devtools livereload 기능 사용하기 (intellij) (0) | 2024.02.19 |
---|---|
스프링 시큐리티 - 회원가입, 로그인, 권한별 페이지 접근 설정 (0) | 2024.01.20 |
쿠키로 jwt 전달하고 검증하기 (0) | 2023.11.29 |
스프링부트 테스트용 DB분리 (0) | 2023.11.21 |
스프링 부트 + 도커(docker, docker-compose) (1) | 2023.11.06 |