에러
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Cannot construct instance of `객체!`
(no Creators, like default construct, exist): cannot deserialize from Object value
(no delegate- or property-based Creator)
에러 메세지를 읽어보면 requestBody로 전달되는 객체에 기본 생성자가 없어서 에러가 난다는 뜻이다.
request로 전달되는 객체의 기본 생성자
- 아래처럼 requestBody로 전달되는 객체는 아무 파라미터를 넣지 않아도 생성되는 기본 생성자가 필요하다.
-
@PostMapping("/page/data") public ModelAndView downloadPageData(@RequestBody PageFileData pageFileData, Model model) { model.addAttribute(CubeDataView.KEY_DATA, pageFileData); return new ModelAndView("xlsxView", model.asMap()); }
-
- @requestBody에 기본 생성자가 필요한 이유
- 기본 생성자가 없다면, 에러가 발생한다.
기본 생성자를 사용하지 않고 해결하는 방법
- build.gradle에 jackson-module-parameter-names 의존성을 추가해주면 된다.
- implementation 'com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.3'
- spring boot를 사용할 때 spring-boot-starter-web에서 이미 jackson-module-parameter-names에 대한 의존성이 추가된다.
- spring-boot-starter-web → spring-boot-starter-json → jackson-module-parameter-names
주의사항
- 컴파일 옵션에 따라서 다르게 동작한다.
- 프로젝트에서 아래처럼 Build and run using을 Gradle로 지정해줘야지 build.gradle의 컴파일 옵션이 그대로 적용된다.
Build and run using을 IntelliJ IDEA로 지정한 상태면 안된다!!!
반응형
'서버 > SpringBoot' 카테고리의 다른 글
스프링부트가 다중 유저 요청을 처리하는 방법 (Thread Pool, Thread Safe) (0) | 2022.11.25 |
---|---|
[Spring/Kotlin] Entity는 data class로 구현하는게 좋을까? (0) | 2022.05.15 |
[kotlin] spring jpa에서 복합키를 사용하는 방법, @EmbeddedId, @IdClass (0) | 2022.05.10 |
[Spring] 하나의 build.gradle 파일로 여러 내부 프로젝트 빌드하기 (0) | 2022.03.31 |
[Spring] EHcache를 이용해 캐시 간단하게 적용하기 (feat. @ Cacheable) (0) | 2022.01.05 |