TIL220615

김선미·2022년 6월 15일

오늘 배운 것

  • 스프링 기초 4주차 11강
  • 스프링 심화 1주차 7강

위의 두 강의는 똑같은 select shop 프로젝트를 다루고 있어서 병행해서 들을 수 있었다.


스프링 기초 4주차 11강

html과 자바스크립트를 구현하는 부분인데 당장 스프링 공부를 주력하고 싶은 나에게는 집중이 되지 않아서 4주차 완강을 못했다. 내일은 4주차를 꼭 완강해야겠다.


스프링 심화 1주차 7강

  • 최대한 스프링 3계층 controller, service, repository 없이 프로젝트를 만들어보기
  • Suvlet 을 이용하여 api 기능 만들기

get api는 스프링의 controller를 사용해서 통신이 잘 되었지만 suvlet을 사용한 post api는 통신이 되지 않았다.
튜터님은 잘 되는데 왜 나는 오류가 난 건지,,,? 코드를 복붙만 했는데 오류가 나서 당황했다.

Servlet.service() for servlet 
[com.sparta.hardweek01.AllInOneServlet] 
in context with path [] threw exception

Java 8 date/time type `java.time.LocalDateTime` 
not supported by default: add Module 
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310" 
to enable handling (through reference chain: 
com.sparta.hardweek01.Product["createdAt"])

위의 에러 메세지를 검색해보니 자바 8 버전에서 LocalDateTime을 지원하지 않아서 생긴 문제였다. JSON 통신 모듈을 설치 할 수 있는 maven repository 에서 jackson-datatype-jsr310 모듈을 받아 build.gradle에 설치하고 LocalDateTime을 이용하는 ObjectMapper 함수에 아래와 같은 모듈 코드를 추가해주면 해결된다고 한다.

ObjectMapper.registerModule(new JavaTimeModule());

그런데 ObjectMapper 라는 함수를 이해하지도 못한채 위의 모듈 코드를 복사해서 썼더니 문제가 해결되지 않았다.
이 에러 때문에 강의를 듣지 못했다. 내일 해결할 수 있으면 좋겠다...

해결

질문방에 2주전에 캠퍼분이 남겨주신 해결책을 보고 해결되었다. 나랑 똑같은 코드로 해결했는데 난 해결 안됐는데 뭐지? 했는데 다름아닌 빵틀이 아니라 빵을 사용해야 한다는 문제였다. 혼자 힘으로 해결하지 못해서 아쉽지만 다음 강의를 들을 수 있어서 다행이다.

// 자바 객체 -> JSON 으로 변환
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JavaTimeModule()); //추가
        String productJson = objectMapper.writeValueAsString(product);
  • ObjectMapper라는 메소드를 사용하기 위해 객체 objectmapper 선언을 했으니 그 다음 코드부터는 ObjectMapper가 아닌 객체 objectmapper 를 사용해야 한다.
  • 모든 ObjectMapper를 객체로 가져다 쓰는 코드마다 해줘야하는 건 아니고 product 라는 파라미터를 ObjectMapper를 이용해 JSON으로 바꾸어주는 부분만 위의 코드를 추가해주면 된다.
profile
백엔드 개발 공부

0개의 댓글