티스토리 뷰
0. Form에서 전송한 데이터를 Date로 변환이 필요한 경우가 많다. 워낙 다양하기 때문에 생각 날 때마다 추가할 예정
form에서 Parmater로 받아 Controller에서 Date로 변환하는 방법 (LocalDate에도 사용가능하다)
1. Form에서 입력한 값을 Controller에서 Date객체로 변환하려면 @DateTimeFormat을 사용할 수 있다.
1-0 아래는 항공편을 예약할 때 사용하는 Flight 검색정보를 받아서 항공편을 검색하는 예제이다.
1-1 @RequestParam으로 전달 받은 값을 @DataTimeFormat은 Date객체로 변환한다.
1-2 @DateTimeFormat pattern 속성에서 어떤 형식으로 값이 입력되는지를 정의할 수 있다.
@Controller
public class FlightController {
@Autowired
FlightRepository flightRepository;
private static final Logger LOGGER = LoggerFactory.getLogger(FlightController.class);
@PostMapping("/findFlights")
public String findFlights(
@RequestParam String from,
@RequestParam String to,
@RequestParam("departureDate") @DateTimeFormat(pattern = "MM-dd-yyyy") Date departureDate,
Model model) {
LOGGER.info("from:: " + from + ", to:: " + to + ", departureDate:: " + departureDate.toString());
List<Flight> flights = this.flightRepository.findFlights(from, to, departureDate);
model.addAttribute("flights", flights);
return "displayFlights";
}
}
2. MySql의 Date는 년월일 까지만 저장한다. 시간까지 저장하려면 DateTime을 사용해야 한다.
3. 자바의 Date는 시간 정보까지 저장할 수 있는 클래스임을 유의한다.
form에서 @ModelAttribute 로 받아 Date로 변환하는 방법 (LocalDate에도 사용가능하다)
1. 위의 방법과 동일하게 @DateTimeFormat을 사용한다.
1-1 @DateTimeFormat을 DTO나 Entity클래스의 속성에 정의할 수 있다.
1-2 위와 동일한 예제이다. pattern은 상황마다 달라질 수 있다.
1-2-1 일반적으로 한국어로 html에 input type="date"로 정의되면 아래처럼 yyyy-MM-dd 포멧이 된다.
Entity에서 Annotation을 통해 Format을 지정하는 방법
1. Entity 클래스를 열어 지정을 원하는 곳에 @DateTimeFormat을 사용한다.
package pe.pilseong.flightreservation.dto;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import lombok.Data;
@Data
public class FlightSearchDTO {
private String from;
private String to;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date departureDate;
}
@InitBinder와 PropertyEditorSupport를 사용하여 변환하기 (LocalDate, Date 모두 가능하다.)
1. setAsText는 String값을 받아서 특정 속성을 변환하는 기능을 지원한다.
2. 아래의 경우는 String을 LocalDate으로 변경하는 것을 지원한다.
@InitBinder
public void dateBinder(WebDataBinder dataBinder) {
dataBinder.setDisallowedFields("id");
dataBinder.registerCustomEditor(LocalDate.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) throws IllegalArgumentException {
setValue(LocalDate.parse(text));
}
});
}
@InitBinder와 CustomDateEditor을 사용하여 변환하기 (Date만 가능)
1. SimpleDateFormat 객체를 생성하여 원하는 포멧을 지정하고
2. CustomDateEditor를 생성하여 formatter를 지정한 후 등록한다.
@InitBinder
public void initBinder(WebDataBinder binder) {
log.info("initBinder in TodoController \n");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
String과 Date를 변환을 위한 클래스 사용하기
1. Database에 Date 타입의 column을 만든다. 아래는 date_of_birth라는 column으로 date 타입으로 되어 있다.
1-1 물론 datetime으로 사용할 수도 있는데 MySql의 Datetime은 시간정보도 포함한다.
MySql의 student table은 아래의 구조로 되어 있다고 가정
'id', 'int', 'NO', 'PRI', NULL, 'auto_increment'
'first_name', 'varchar(45)', 'YES', '', NULL, ''
'last_name', 'varchar(45)', 'YES', '', NULL, ''
'date_of_birth', 'date', 'YES', '', NULL, ''
'email', 'varchar(45)', 'YES', '', NULL, ''
2. DateUtil 클래스를 생성한다.
2-1 기능은 단순한데 parseDate 메소드는 String을 Date 객체로 변환하는 것이고
2-2 formatDate 메소드는 Date객체를 String으로 변환하는 기능을 가진다.
public class DateUtil {
private static SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
public static Date parseDate(String dateStr) throws ParseException {
Date date = formatter.parse(dateStr);
return date;
}
public static String formatDate(Date date) {
String dateStr = null;
if (date != null) {
dateStr = formatter.format(date);
}
return dateStr;
}
}
'Spring > Spring Basic' 카테고리의 다른 글
Spring : Web MVC + Hibernate with XML Config - Service Layer (0) | 2020.05.11 |
---|---|
Spring : Web MVC + Hibernate with XML config- 설정하기 (0) | 2020.05.11 |
Spring : Data JPA - 상속 Entity의 Lombok (0) | 2020.04.29 |
Spring : JFreeChart 사용하기 (0) | 2020.04.26 |
Spring : Web MVC - classpath (0) | 2020.04.24 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- spring boot
- 매핑
- 설정하기
- crud
- Validation
- 스프링부트
- form
- Spring Security
- Spring
- login
- 자바
- MYSQL
- 외부파일
- mapping
- RestTemplate
- Many-To-Many
- 하이버네이트
- WebMvc
- one-to-one
- Security
- 로그인
- 설정
- 상속
- Angular
- Rest
- jsp
- 스프링
- hibernate
- XML
- one-to-many