목차
1.Java 8 date/time type java.time.LocalDateTime not supported by default
LocalDataTime을 역직렬화하지 못해서 생기는 문제입니다.
2.특정 dto 를 반환해주는 api에서 406 에러가 발생
3.GroovyRuntimeException: Conflicting module versions
4.failed to lazily initialize a collection of role: could not initialize proxy - no Session
5. implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3' 으로 인한 오류발생()
목차로 이동
LocalDataTime을 역직렬화하지 못해서 생기는 문제입니다.
jackson-datatype-jsr310 종속성을 추가하고 해결해야 됩니다.
//자바 역직렬화 문제 해결 패키지
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
implementation 'com.fasterxml.jackson.core:jackson-databind'
추가적으로 만약 캐시로 사용할 객체에 LocalDateTime 타입의 값이 존재한다면 위처럼 @JsonSerialize, @JsonDeserialize 어노테이션을 기입해줘야 합니다.. 그렇지 않으면 오류가 발생합니다. (대다수의 Entity에 공통적으로 created_at, updated_at을 넣어주기 위해 위처럼 MappedSuperclass를 사용하고 있다)
목차로 이동
자세한 사이트
스프링은 별도로 지정해주지 않는 이상 직렬화/역직렬화 방법으로 Jackson 라이브러리를 이용한다
Jackson은 Java Object를 Json 형태로 변환시켜주거나, 반대로 Json 객체를 Java Object 형태로 변환시켜주는 라이브러리이다.
db table에는 java object를 담을 수 없기 때문에 영속화를 위해선 json 형태로 변환해주는 라이브러리가 필요하다.
그런데 Jackson이 Java Object를 Json 형태로 변환시켜주기 위해선 각 필드의 getter 메서드와 기본생성자를 필요로 한다.
jackson이 데이터를 bind하는 과정에서 문제가 생겼다는 것인데,
Type definition error: [simple type, class chess.dto.MoveDto]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of
chess.dto.MoveDto
(no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 2]
기본 생성자가 존재하지 않아 deserialize가 되지 않았다는 것이다.
Json 객체로 요청값은 받아왔는데, MoveDto에 기본생성자가 존재하지 않아 MoveDto로 역직렬화가 되지 않았다는 것이다.
목차로 이동
자세한 사이트
build.gradle의 버전이 문제인 상황일때 벌어지는 에러이다
목차로 이동
JPA관련 오류로 @Transactional 어노테이션이 없다든지.
이미 종료된 컨텍스트를 이용하여 조회하려 한다던지. 그럴때 일어날수있는 오류로 비어있는 데이터를 넣어주려 하거나 조회하려 할때 일어난다
SLF4J: Class path contains multiple SLF4J providers.
SLF4J: Found provider [org.slf4j.simple.SimpleServiceProvider@400cff1a]
SLF4J: Found provider [ch.qos.logback.classic.spi.LogbackServiceProvider@275710fc]
SLF4J: See https://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual provider is of type [org.slf4j.simple.SimpleServiceProvider@400cff1a]
Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.simple.SimpleLoggerFactory loaded from file:/C:/Users/mind/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/2.0.7/bfa4d4dad645a5b11c022ae0043bac2df6cf16b5/slf4j-simple-2.0.7.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.simple.SimpleLoggerFactory
위의 내용이 에러로 뜨는데 아래는 좀 더 길다.
implementation group: 'it.ozimov', name: 'embedded-redis', version: '0.7.3'
라는 스프링 부트에서 기본적으로 실행시 제공하는 로컬 레디스이다.
하지만 기본적으로 slf4j의 내가 가진것과 다른 것을 가지고 있거나
plugins{
id 'war'
}
위와 같이 jar가 아니라 war일 경우 안될 수 있다.
보면.. 다른 의존성을 넣었을때.. jar로는 돌아갔으나 war로 안되는거보면 war로 했을때
뭔가 안돌아 가는게 있는것 같은데