Thymeleaf LocalDateTime 사용법에 대해서 알아볼게요. Thymeleaf에서 LocalDateTime 을 처음 쓸때... 여기서 스트레스 받는 분이 은근 많더라구요.
POST 방식에서 사용하는 법.
우선 사용중인 Domain 클래스는 이런식으로 되어있어요. 아래는 생략~
html 파일에서 날짜를 선택할 거에요. 그래서 input 태그를 아래와 같이 만들어줬어요.
{% codeblock %}
{% endcodeblock %}
Contorller 에서는 아래와 같이 만들어 줬어요. 전체 코드는 아니고 필요한 부분만 찰칵!
{% codeblock %}
@PostMapping("/product_detail/register")
public String registerProduct(@ModelAttribute(value = "product") Product product) {
System.out.println("====== product.getManufactureDate() : " + product.getManufactureDate());
}
{% endcodeblock %}
이런식으로 시도를 해봤는데. 값이 넘어올때 에러는 나지 않지만 null 값으로 들어온다... 왤까요?!
그래서 이번엔 다르게 이런식으로다가! 시도!
컨트롤러와 html 파일을 이런식으로 바꿔줬어요! 그리고 실행! 하면...
이렇게 에러가 나버려요 ㅠㅠ 해결방법은 아래와 같아요.
RequestParam 타입을 String 으로!
input 태그에서 type이 datetime-local 이라고 나와있는데, 이거에 혹해서 @RequestParam 변수의 타입을 LocalDateTime 으로만 고집하면 안돼요. 그냥 String 으로 바꿔보세요! 그럼 오류가 발생하지 않아요!
input 에서 넘어온 데이터를 어떻게 취급할지는 각자 필요한 방식을 사용하면 됩니다
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)을 붙여줘요!
이런식으로 @RequestParam 뒤에 붙여주세요. iso 에 대해선 조사해보세요... 해결방법을 알아내는데 시간을 꽤 많이 잡아먹어서.. 저것까지 조사할 엄두가 안나네요(당당)!
또다른 해결방법? DTO 를 만들어서 해결하는 방법도...?
GET 방식에서 사용하는 법.
이번엔 GET 방식에서 LocalDateTime 형식의 데이터를 html에 보여주는 방법에 대해 쓸게요! 먼저 컨트롤러에서 아래와 같은 메소드를 만들어 줬어요!
그리고 html 파일에서는 아래와 같이 써줘요.
{% codeblock %}
{% endcodeblock %}
하면! 아래와 같이 잘 출력이 되네요...!??
아니죠! T가 가운데 붙어있는게 너무 느낌없어요. 막 지우고 싶어져요. 지울때 temporals을 이용해서 형식을 지정해줄거에요.(원리는 구글에 thymeleaf Java 8 Time Dialect 검색!)
우선 pom.xml 에 추가해주세요.
{% codeblock %}
{% endcodeblock %}
그리고 프로젝트에 아래와 같은 config 파일을 만들어주세요.
{% codeblock %}
@Configuration
public class ProgramConfiguration {
@Bean
public Java8TimeDialect java8TimeDialect() {
return new Java8TimeDialect();
}
}
{% endcodeblock %}
마지막으로 태그에 temporals~ 를 붙여주시면 T 없이 출력이 돼요!
temporals 앞에 # 붙여야해요! 단지 편집기에서 중괄호 뒤에 #을 붙이면 오류가 나서 빼준거뿐이에요.
{% codeblock %}
{% endcodeblock %}
그러면 아래와 같이 T 없이 출력이 될거에요!
이상입니다!