0916 개발일지

Yesol Lee·2022년 9월 16일
0

개발일지 - 2022

목록 보기
136/187

오늘 한 일

  • 이미지 파일 화면에 보여주는 기능 구현
  • 날짜 formatting

업로드 한 파일 화면에 보여주기

  • 첨부파일이 이미지일 때는 html에서 이미지를 보여주기 위해 해당 파일이 이미지인지 아닌지 체크할 필요가 있었다.

String 배열에 특정 문자열 있는지 체크

  • Attach는 첨부파일 정보를 담은 클래스인데, image 여부를 굳이 변수에 담기보다 그냥 메소드 반환값으로 하면 다른 코드를 안 바꿔도 될 것 같아서 이미지 여부를 boolean으로 반환하는 메소드를 추가하였다.
  • 파일의 확장자가 이미지 확장자 중 하나에 해당하는지 여부를 보기 위해 확장자 리스트를 문자열 배열로 만들었다.
  • Array.stream()을 활용
    How do I determine whether an array contains a particular value in Java?
// Attach.java
// 이미지 여부 반환
public boolean isImage() {
	String[] ext = {"jpg", "jpeg", "png", "gif"};
	return Arrays.stream(ext).anyMatch(this.getATTF_EXE().toLowerCase()::equals);
}

Java의 ::(Double colon) 사용법

  • 명칭 : 메소드 참조 표현식 (method reference expression)
  • 사용하는 곳 : 람다식 안에서 static method, 인스턴스 메소드, 생성자 등 사용할 때
    Double colon (::) operator in Java

    Syntax : <Class name>::<method name>

// stream의 모든 요소를 print
stream.forEach( System.out::println);

이클립스에서 application.properties 주석 한글 깨짐 해결

  • 파일 업로드 관련 설정을 application.properties에 작성하면서 한글로 주석을 달아놨었는데, github에 올라온 것을 보니 한글이 전부 깨져있는 것을 알게 되었다.
  • 검색해보니 이클립스에서 발생하는 인코딩 문제인 것 같았다.
  • window-preference에서 설정하기

이클립스 properties 파일 한글 깨지는 경우

thymeleaf로 localDateTime 포맷 변경

  • 검색해보니 thymeleaf-extras-java8time를 이용해 간단히 포맷팅하는 방법이 있어서 적용해보았다.

thymeleaf-extras-java8time 사용하기

1. build.gradle에 thymeleaf-extras-java8time 라이브러리 추가

implementation 'org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE'

thymeleaf-extras-java8time gradle

2. 설정 파일에 bean 등록

@Configuration
public class SpringConfig {
	
	@Bean
	public Java8TimeDialect java8TimeDialect() {
		return new Java8TimeDialect();
	}
...
}

3. html thymeleaf 추가

<li th:each="post : ${postList}">
    <span th:if="${post.POST_UPDATE==null}" th:text="|최초 작성일 : ${#temporals.format(post.POST_DATE, 'yyyy-MM-dd HH:mm')}|">최초 작성일</span>
    <span th:unless="${post.POST_UPDATE==null}" th:text="|수정일 : ${#temporals.format(post.POST_UPDATE, 'yyyy-MM-dd HH:mm')}|">수정일</span>
</li>

format 에러

org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method format(java.util.Date,java.lang.String) cannot be found on type org.thymeleaf.extras.java8time.expression.Temporals

  • 계속 string타입을 format으로 변환할 수 없다는 에러가 떠서 해결 못하고 있었는데 알고보니 내가 String으로 날짜값을 보내고 있었다... 처음 만든 Post 클래스는 LocalDateTime 그대로인데 PostForm 객체로 변환하면서 string으로 바꾸는 것을 잊어버린 것이다.
  • domain의 date들을 LocalDateTime으로 바꿔주고 나니 잘된다.
  • 만약 domain의 date를 string으로 유지하고 싶다면 java 단에서 string date를 다른 포맷으로 바꾸어주어야 할 것 같다.
// PostForm.java
// 게시물 최초 등록일
// String POST_DATE;
LocalDateTime POST_DATE;

// 게시물 수정일
// String POST_UPDATE;
LocalDateTime POST_UPDATE;
profile
문서화를 좋아하는 개발자

0개의 댓글