반응형

 

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>

 

결과 화면1 : 월과 일에 앞에 0 붙여야 함

 

 

 

  • 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>

 

결과 화면2

 

 

 

  • 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;
}

 

결과 화면3-1

 

결과 화면3-2

 

결과 화면4 : regDate의 값이 맞게 출력된 걸 확인할 수 있음

 

 

 

  • 쿼리 파라미터(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";
}

 

결과 화면5

 

 

 

  • 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";
}

 

결과 화면6

 

 

 

  • 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";
}

 

결과 화면7

 

 

 

폼 필드 요소 값을 매개변수로 처리

 

 

  • 문자열 타입, 자바빈즈 매개변수(텍스트, 비밀번호)

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";
}

 

결과 화면8-1

 

결과 화면8-2

 

 

 

  • 라디오 버튼, 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";
}

 

결과 화면9-1

 

결과 화면16-2 : ArrayList로는 불가능함!!

 

 

 

  • 체크박스

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";
}

 

결과 화면10-1

 

결과 화면10-2 :&nbsp; ArrayList로는 불가능함!!

 

 

 

  • 문자열 타입 & 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";
}

 

결과 화면11-1

 

결과 화면11-2

 

결과 화면11-3

 

결과 화면11-4

 

 

 

  • 중첩된 자바빈즈

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";
}

 

결과 화면12-1

 

결과 화면12-2

 

결과 화면12-3

 

 

반응형