// 안되는 코드
attach.setATTF_EXE(filenames[Id].split(".")[1]);
// 되는 코드
attach.setATTF_EXE(filenames[Id].split("\\.")[1]);
java.lang.NullPointerException: text
at java.util.Objects.requireNonNull(Unknown Source) ~[na:1.8.0_281]
at java.time.format.DateTimeFormatter.parse(Unknown Source) ~[na:1.8.0_281]
at java.time.LocalDateTime.parse(Unknown Source) ~[na:1.8.0_281]
at java.time.LocalDateTime.parse(Unknown Source) ~[na:1.8.0_281]
at com.ticktack.homey.domain.PostForm.getPostFromPostForm(PostForm.java:131) ~[main/:na]
at com.ticktack.homey.controller.PostController.updatePost(PostController.java:86) ~[main/:na]
Post
클래스는 게시물 정보만 담겨있고, PostForm
는 게시물 정보 + 댓글 리스트 + 첨부파일 객체까지 가지고 있는 클래스이다. 매번 set, get으로 클래스 변환하기 귀찮아서 각 클래스에 타입 변환한 객체를 반환하는 메소드를 만들었다.최초 생성일
, 최종 수정일
값이 null인데 LocalDateTime
타입 변수에 그냥 저장하려고 하면 에러가 발생한다. Optional
로 감싸서 null체크 후 값을 세팅할 수 있도록 변경하였다.// PostForm.java
// PostForm을 Post 객체로 변환해서 반환
public Post getPostFromPostForm () {
Post post = new Post();
...
Optional.ofNullable(this.getPOST_DATE()).ifPresent(s -> post.setPOST_DATE(LocalDateTime.parse(s)));
Optional.ofNullable(this.getPOST_UPDATE()).ifPresent(s -> post.setPOST_UPDATE(LocalDateTime.parse(s)));
...
post.setATTF_ID(this.getATTF_ID());
return post;
}
사용자(user)
, 게시물(post)
, 댓글(comment)
, 첨부파일정보(attach)
등 다양한 종류의 더미데이터가 필요하다.SpringConfig.java
에서 bean으로 등록// DummyDataImpl.java
@Override
public void setReplyComments(Long postId) {
System.out.println("더미 대댓글 삽입 시작");
Comment tmp = new Comment();
tmp.setPostId(postId);
List<Comment> comments = commentService.commAllList(tmp);
for (Comment comment : comments) {
if(comment.getCommId()%2!=0) {
Comment reply = new Comment();
reply.setPostId(comment.getPostId());
reply.setCommCont("-->" + comment.getCommCont() + "에 대한 대댓글");
reply.setCommWriter(comment.getCommWriter());
reply.setCommUpid(comment.getCommId());
commentService.commInsert(reply);
}
}
}
스프링 핵심 원리 - 기본편
수강 중프레임워크
: 프레임워크가 내가 작성한 코드를 제어하고 대신 실행하는 것 (JUnit 등)라이브러리
: 내가 작성한 코드가 직접 제어 흐름을 담당하면 프레임워크 아닌 라이브러리ApplicationContext
: 스프링 컨테이너 시작점ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
getBean()
으로 가져오기