Date 타입 처리
스프링 MVC는 Date 타입의 데이터를 처리하는 여러 방법을 제공.
따로 지정하지 않으면 변환에 적합한 문자열 형식은 yyyy/MM/dd
formHome.jsp
<script type="text/javascript">
function getToday() {
let today = new Date();
let year = today.getFullYear();
let month = ('0' + (today.getMonth() + 1)).slice(-2);
let day = ('0' + today.getDate()).slice(-2);
let dateString = year + "-" + month + "-" + day;
//2024-5-1 -> 2024-05-01
console.log("dateString : ", dateString);
}
getToday();
</script>
<!--
요청URI : /register01
요청파라미터 : {userId=hongkd,password=1234,coin=100}
요청방식 : post
-->
<form action="/register01" method="post">
<p>userId : <input type="text" name="userId"
value="hongkd" /></p>
<p>password : <input type="password" name="password"
value="1234" /></p>
<p>coin : <input type="text" name="coin"
value="100" /></p>
<p>regist Data : <input type="date" name="regDate"
value="2024-05-01" /></p>
<p><input type="submit" value="register01" /></p>
</form>
- 2024-5-1 -> 2024-05-01로 출력하기
formHome.jsp
<!--
요청URI : /register01
요청파라미터 : {userId=hongkd,password=1234,coin=100}
요청방식 : post
-->
<form action="/register01" method="post">
<p>userId : <input type="text" name="userId"
value="hongkd" /></p>
<p>password : <input type="password" name="password"
value="1234" /></p>
<p>coin : <input type="text" name="coin"
value="100" /></p>
<p>regist Data : <input type="date" name="regDate"
value="" /></p>
<p><input type="submit" value="register01" /></p>
</form>
<script type="text/javascript">
function getToday() {
let today = new Date();
let year = today.getFullYear();
let month = ('0' + (today.getMonth() + 1)).slice(-2);
let day = ('0' + today.getDate()).slice(-2);
let dateString = year + "-" + month + "-" + day;
//2024-5-1 -> 2024-05-01
console.log("dateString : ", dateString);
//<input type="date" name="regDate" value="" />
let obj = document.querySelector("input[name='regDate']");
obj.value = dateString;
}
getToday();
</script>
- DB에 값 저장
테이블 정보 (없으면 추가!!)
CREATE TABLE MEMBER(
USER_ID VARCHAR2(20),
USER_NAME VARCHAR2(90),
PASSWORD VARCHAR2(300),
REG_DATE DATE,
COIN NUMBER,
CONSTRAINT PK_MEMBER
PRIMARY KEY(USER_ID)
);
MemberController.java
@ResponseBody
@PostMapping("/register01")
public String register01(
@RequestParam("userId") String id,
@RequestParam("password") String pwd,
int coin,
@DateTimeFormat(pattern="yyyy-MM-dd") Date regDate, //Date의 경우 어떤 패턴으로 들어오는지 알려줘야 함
Member member) {
log.info("id : " + id);
log.info("pwd : " + pwd);
log.info("coin : " + coin);
log.info("regDate : " + regDate);
log.info("member : " + member);
return "success";
}
Member.java
package kr.or.ddit.vo;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
//POJO가 약해짐
@Data
public class Member {
private String userId;
private String userName = "hongkd";
private String password = "1234";
@DateTimeFormat(pattern="yyyy-MM-dd") private Date regDate;
private int coin;
}
- 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이 날짜 문자열 형식에 맞지 않아 Date 타입으로 변환 실패
MemberController.java
/* 5. Date 타입 처리
스프링 MVC는 Date 타입의 데이터를 처리하는 여러 방법을 제공.
따로 지정하지 않으면 변환에 적합한 문자열 형식은 yyyy/MM/dd
*/
/*
1) 쿼리 파라미터(dateOfBirth=1234)로 전달받은 값이
날짜 문자열 형식에 맞지 않아 Date 타입으로 변환 실패
요청URI : /registerByGet01?userId=hongkd&dateOfBirth=1234
요청파라미터 : userId=hongkd&dateOfBirth=1234
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet01")
public String registerByGet01(String userId,
Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
=> 날짜의 파라미터로 1234, 2018-09-08, 20180908로 입력 시엔 날짜로 인지하지 못하지만 2018/09/08의 경우 날짜로 인식한다.
앞의 경우 날짜로 인식하게 하기 위해선 파라미터의 자리에 @DateTimeFormat(pattern="yyyy-MM-dd") 를 추가해주어야 한다.
DateTimeFormat 애너테이션
- 1225
MemberController.java
/* 6. DateTimeFormat 애너테이션
DateTimeFormat 애너테이션의 pattern 속성값에
원하는 날짜 형식을 지정할 수 있음
*/
/*
요청URI : /registerByGet0105?userId=hongkd&dateOfBirth=1225
요청파라미터 : userId=hongkd&dateOfBirth=1225
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet0105")
public String registerByGet0105(String userId,
@DateTimeFormat(pattern="MMdd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
- 2024-05-01
MemberController.java
/*
요청URI : /registerByGet0106?userId=hongkd&dateOfBirth=2024-05-01
요청파라미터 : userId=hongkd&dateOfBirth=2024-05-01
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet0106")
public String registerByGet0106(String userId,
@DateTimeFormat(pattern="yyyy-MM-dd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
- 20240501
MemberController.java
/*
요청URI : /registerByGet0107?userId=hongkd&dateOfBirth=20240501
요청파라미터 : userId=hongkd&dateOfBirth=20240501
요청방식 : get
*/
@ResponseBody
@GetMapping("/registerByGet0107")
public String registerByGet0107(String userId,
@DateTimeFormat(pattern="yyyyMMdd") Date dateOfBirth) {
log.info("userId : " + userId);
log.info("dateOfBirth : " + dateOfBirth);
return "success";
}
폼 필드 요소 값을 매개변수로 처리
- 문자열 타입, 자바빈즈 매개변수(텍스트, 비밀번호)
formHome.jsp
<!--
요청URI : /registerUserId
요청파라미터 : {userId=honggd}
요청방식 : post
-->
<form action="/registerUserId" method="post">
<p>userId : <input type="text" name="userId" /></p>
<p>password : <input type="password" name="password" /></p>
<p><input type="submit" value="registerUserId" /></p>
</form>
MemberController.java
/*
1) 폼 텍스트 필드 요소 값을 기본 데이터 타입인 문자열 타입 매개변수로 처리함
2) 폼 텍스트 필드 요소값을 자바빈즈 매개변수로 처리
3) 폼 비밀번호 필드 요소값을 자바빈즈 매개변수로 처리
요청URI : /registerUserId
요청파라미터 : {userId=hongkd}
요청방식 : post
*/
@ResponseBody
@PostMapping("/registerUserId")
// public String registerUserId(String userId) { //1)
public String registerUserId(Member member) { //2), 3)
// log.info("userId : " + userId); //1)
log.info("userId : " + member.getUserId());//2)
log.info("password : " + member.getPassword()); //3)
return "seccess";
}
- 라디오 버튼, select, 복수 선택
- 체크(선택) 방법
radio / checkbox => checked
select => selected
라디오 버튼 : 컨트롤러의 매개변수 - String
select 박스 : 컨트롤러의 매개변수 - String
복수 선택 : 컨트롤러의 매개변수 - String[]
formHome.jsp
<form action="/registerUserId" method="post">
<p>userId : <input type="text" name="userId" /></p>
<p>password : <input type="password" name="password" /></p>
<!-- 라디오 버튼 -->
<p>gender :
<!--
radio / checkbox => checked
select => selected
-->
<!-- 컨트롤러의 매개변수로 String gender -->
<input type="radio" name="gender" id="gender1" value="male" checked />
<label for="gender1">Male</label><br /> <!-- input의 id와 같은 값을 for에 넣을 시 이름을 클릭해서 클릭된 효과가 됨 -->
<input type="radio" name="gender" id="gender2" value="female" />
<label for="gender2">Female</label><br />
<input type="radio" name="gender" id="gender3" value="other" />
<label for="gender3">Other</label><br />
</p>
<!-- select -->
<p>nationality :
<!-- 컨트롤러의 매개변수로 String nationality -->
<select name="nationality">
<option value="Korea" selected>대한민국</option>
<option value="Germany" >독일</option>
<option value="Australia" >호주</option>
<option value="Canada" selected>캐나다</option>
</select>
</p>
<!-- 복수 선택 -->
<p>car :
<!-- 문자열 배열 타입 매개변수로 처리 -->
<!-- 컨트롤러의 매개변수로 String cars -->
<select name="cars" multiple>
<option value="volvo" selected>Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</p>
<p>car :
<!-- 문자열 배열 타입 매개변수로 처리 -->
<!-- 컨트롤러의 매개변수로 String[] carArray -->
<select name="carArray" multiple>
<option value="volvo" selected>Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</p>
<p>car :
<!-- 문자열 배열 타입 매개변수로 처리 -->
<!-- 컨트롤러의 매개변수로 ArrayList<String> carList -->
<select name="carList" multiple>
<option value="volvo" selected>Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
</p>
<p><input type="submit" value="registerUserId" /></p>
</form>
MemberController.java
@ResponseBody
@PostMapping("/registerUserId")
public String registerUserId(String userId,
String password, String gender,
String nationality, String cars,
String[] carArray, ArrayList<String> carList) {
log.info("userId : " + userId);
log.info("password : " + password);
log.info("gender : " + gender);
log.info("nationality : " + nationality);
log.info("cars : " + cars);
if(carArray!=null) {
log.info("------carArray------");
for(String car : carArray) {
log.info(car);
}
log.info("------------");
}
// carList.size() : 0
if(carList!=null) {
log.info("------carList------");
for (int i=0;i<carList.size();i++) {
log.info(carList.get(i));
}
log.info("------------");
}
return "seccess";
}
- 체크박스
formHome.jsp
<form action="/registerUserId" method="post">
<p>
<!-- 컨트롤러에서 매개변수로써 String hobby -->
hobby :
<input type="checkbox" name="hobby" value="Sports">Sports<br />
<input type="checkbox" name="hobby" value="Music">Music<br />
<input type="checkbox" name="hobby" value="Movie">Movie<br />
</p>
<p>
<!-- 컨트롤러에서 매개변수로써 String[] hobbyArray -->
hobbyArray :
<input type="checkbox" name="hobbyArray" value="Sports">Sports<br />
<input type="checkbox" name="hobbyArray" value="Music">Music<br />
<input type="checkbox" name="hobbyArray" value="Movie">Movie<br />
</p>
<p>
<!-- 컨트롤러에서 매개변수로써 List<String> hobbyList -->
hobbyList :
<input type="checkbox" name="hobbyList" value="Sports">Sports<br />
<input type="checkbox" name="hobbyList" value="Music">Music<br />
<input type="checkbox" name="hobbyList" value="Movie">Movie<br />
</p>
<p><input type="submit" value="registerUserId" /></p>
</form>
MemberController.java
@ResponseBody
@PostMapping("/registerUserId")
public String registerUserId(
String hobby,
String[] hobbyArray,
ArrayList<String> hobbyList
) {
log.info("hobby : " + hobby);
if(hobbyArray!=null) {
log.info("------hobbyArray------");
for(String hob : hobbyArray) {
log.info(hob);
}
log.info("------------");
}
// hobbyList.size() : 0
if(hobbyList!=null) {
log.info("------hobbyList------");
for (int i=0;i<hobbyList.size();i++) {
log.info(hobbyList.get(i));
}
log.info("------------");
}
return "seccess";
}
- 문자열 타입 & boolean
formHome.jsp
<form action="/registerUserId" method="post">
<p>
<!-- 문자열 타입 매개변수로 처리 => String developer -->
developer :
<input type="checkbox" name="developer" value="Y" />
</p>
<p>
<!-- 불리언 타입 매개변수로 처리 => boolean foreigner -->
<!-- value를 true로 초기화 해야 함 -->
foreigner :
<input type="checkbox" name="foreigner" value="true" />
</p>
<p><input type="submit" value="registerUserId" /></p>
</form>
MemberController.java
@ResponseBody
@PostMapping("/registerUserId")
public String registerUserId(
String developer,
boolean foreigner
) {
log.info("developer : " + developer); // Y / null
log.info("foreigner : " + foreigner); // true / false
return "seccess";
}
- 중첩된 자바빈즈
Member.java
package kr.or.ddit.vo;
import java.util.ArrayList;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
//POJO가 약해짐
@Data
public class Member {
private String userId;
private String userName = "hongkd";
private String password = "1234";
@DateTimeFormat(pattern="yyyy-MM-dd") private Date regDate;
private int coin;
private String gender;
private String nationality;
private String cars;
private String[] carArray;
private ArrayList<String> carList;
private String hobby;
private String[] hobbyArray;
private ArrayList<String> hobbyList;
private String developer;
private boolean foreigner;
// 중첩된(nested) 자바빈즈
private Address address;
}
Address.java
package kr.or.ddit.vo;
import lombok.Data;
@Data
public class Address {
private String postCode; //우편번호
private String location; //주소
}
formHome.jsp
<form action="/registerUserId" method="post">
<p>
postCode : <input type="text" name="postCode" />
<br />
location : <input type="text" name="location" />
</p>
<p>
postCode : <input type="text" name="address.postCode" />
<br />
location : <input type="text" name="address.location" />
</p>
<p><input type="submit" value="registerUserId" /></p>
</form>
MemberController.java
@ResponseBody
@PostMapping("/registerUserId")
public String registerUserId(
Address address,
Member member
) {
log.info("address : " + address);
log.info("member : " + member);
return "seccess";
}
'스프링 프레임워크' 카테고리의 다른 글
[스프링 프레임워크] 17장 파일 업로드 (0) | 2024.05.03 |
---|---|
[스프링 프레임워크] 16장 컨트롤러 요청 처리3(폼 필드 요소 값을 매개변수로 처리) (1) | 2024.05.02 |
[스프링 프레임워크] 14장 컨트롤러 요청 처리1(컨트롤러 메서드 매개변수, 요청 처리, 요청 데이터 처리 애너테이션, 요청 처리 자바빈즈) (0) | 2024.05.01 |
[스프링 프레임워크] 13장 컨트롤러 응답 (0) | 2024.04.30 |
[스프링 프레임워크] 12장 book 파일을 ajax로 변경 (0) | 2024.04.30 |