[JMT 커피 주문 시스템 - 게시판 만들기]
public class QnADto{
private QuestionDto.Response question;
private String content;
public QnADto(QuestionDto.Response question, Answer answer) {
this.question = question;
this.content = (answer==null ? "" : answer.getContent());
}
}
@GetMapping
public ResponseEntity getQuestions(Pageable pageable) {
Page<Question> questionPage = questionService.getQuestions(pageable);
List<Question> questionList = questionPage.getContent();
return new ResponseEntity(new MultiDto<>(questionList.stream().map(
question -> new QnADto(mapper.questionToResponseDto(question), question.getAnswer()))
.collect(Collectors.toList()), questionPage), HttpStatus.OK);
}
- 위와 같이 수정했더니 됐다!ㅠㅠ 해결했다~~☺️
일단 순환 참조를 막기 위해, 제네릭 T가 아니라 DTO, String과 같이 정확한 타입으로 값을 받았다.
그리고 답변을 등록하면 질문&답변 조회가 되는데, 답변이 없으면 에러가 나길래, 답변이 없을 경우(null)를 위의 삼항연산자와 같이 따로 설정해줘야 한다고 생각해서 수정했더니, 예측이 적중했다.
- Handler dispatch failed; nested exception is java.lang.NoSuchMethodError 도 떴는데, 위에 것을 해결하니까 자연히 해결됨.
혹시 몰라서 빌드클린 하고, generated 폴더 지우고 다시 빌드 및 실행함.
https://ohdaldal.tistory.com/19
https://blog.naver.com/PostView.nhn?blogId=arborlucens&logNo=222000415495&parentCategoryNo=&categoryNo=17&viewDate=&isShowPopularPosts=true&from=search
- stream() .findFirst() 와 .findAny()
findFirst() 는 리턴값이 Optional임. 유용하다.
https://codechacha.com/ko/java8-stream-difference-findany-findfirst/
https://isntyet.github.io/java/java-stream-%EC%A0%95%EB%A6%AC(filter)/
- 다대다 관계를 일대다,다대일로 연결하는 조인 테이블에서, 계속 외래키가 null값이 뜨는 에러가 있었다. 한참을 고민하다가 결국 스터디 동기님들께 sos쳤는데, 역시 집단 지성이 최고고, 동기님들은 다 천재다.
결론부터 말하면, cascade = CascadeType.ALL 로 바꿨더니 됨!
새로 만든 객체가 준영속 상태에 있으므로, 그 값을 함께 persist 해주려면, merge가 필요하기 때문이다.
- LocalDateTime 에서 plus, minus, isAfter() 등을 이용해서 시간 비교 가능하다.
https://sunghs.tistory.com/128
- build 툴이 intelliJ여서, 프로그램 실행하면 src 폴더 밑에 generated 폴더가 자동으로 생긴다. 근데 이게 또 뭔가 수정 사항이 제대로 반영이 안 될 때가 있어서 지워줘야 함,, 넘 불편스.
저거 설정 해제해도 실행하면 다시 설정됨,,^^⭐️
- JpaRepository에 JPQL 쿼리 쓰기.
https://sundries-in-myidea.tistory.com/91
[느낀 점]
오늘 하루종일 만져서 게시판 요구 사항 거의 맞췄다.
지금 구현하지 않은 건, '첨부파일 업로드, 검색, 알림' 2~3순위 3가지, 그리고 1순위 시큐리티다.
내일은 Ngrok으로 시험 배포해서 동기님들께 영광의 QA 받아보고,
시간 남으면 오늘 제낀 To-do-App 구현해야겠다.