[java] java.lang.IllegalArgumentException : 유형의 반환 값에 대한 변환기가 없습니다.

이 코드로

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
    public ResponseEntity<foo> foo() {

        Foo model;
        ...
        return ResponseEntity.ok(model);
    }
}

다음 예외가 발생합니다.

java.lang.IllegalArgumentException: No converter found for return value of type

내 생각 엔 Jackson이 없기 때문에 객체를 JSON으로 변환 할 수 없다는 것입니다. 잭슨이 스프링 부츠에 내장되었다고 생각했기 때문에 왜 그런지 모르겠습니다.

그런 다음 Jackson을 pom.xml에 추가하려고 시도했지만 여전히 동일한 오류가 있습니다.

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
</dependency>

이 작업을 수행하려면 스프링 부트 속성을 변경해야합니까?

감사합니다



답변

문제는 중첩 된 개체 중 하나에이었다 Foo어떤을하지 않았다getter/setter


답변

pom.xml에 아래 종속성을 추가하십시오.

 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.0.pr3</version>
</dependency>


답변

오류 메시지에 언급 된 빈 내부에 누락 된 getter / setter를 추가하십시오.


답변

사용 @ResponseBody하고 getter/setter. 문제가 해결되기를 바랍니다.

@RequestMapping(value = "/bar/foo", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<foo> foo() {

업데이트하십시오 mvc-dispatcher-servlet.xml:

<mvc:annotation-driven>
     <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
   </mvc:message-converters>
</mvc:annotation-driven>


답변

내 경우에는 스프링 프레임 워크가 중첩 된 객체의 속성을 가져올 수 없기 때문에 문제가 발생했습니다. 게터 / 세터는 해결하는 한 가지 방법입니다. 속성을 공개하는 것은 이것이 실제로 문제인지 확인하는 또 다른 빠르고 더러운 솔루션입니다.


답변

나는 똑같은 문제가 있었고 불행히도 getter 메서드를 추가하거나 jackson 종속성을 추가하여 해결할 수 없었습니다.

그런 다음 공식 Spring Guide를보고 여기에 제공된 예제를 따랐습니다-https: //spring.io/guides/gs/actuator-service/ 여기서 예제는 반환 된 객체를 JSON 형식으로 변환하는 것을 보여줍니다.

그런 다음 다시 자신의 프로젝트를 만들었습니다. 이번에는 종속성을 추가하고 pom.xml 에있는 플러그인을 빌드한다는 차이점이 있습니다. 위에서 언급 한 공식 Spring Guide 예제 파일에있는 .

XML 파일의 수정 된 종속성 및 빌드 부분은 다음과 같습니다!

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

위의 링크에서 동일한 것을 볼 수 있습니다.

그리고 마술처럼, 적어도 저에게는 효과가 있습니다. 따라서 이미 다른 옵션을 모두 사용했다면 저와 마찬가지로 이것을 시도해 볼 수 있습니다.

참고로 이전 프로젝트에 종속성을 추가하고 Maven이 프로젝트 항목을 설치 및 업데이트 할 때 작동하지 않았습니다. 그래서 처음부터 다시 프로젝트를 만들어야했습니다. 저의 프로젝트는 예제 프로젝트이므로 신경 쓰지 않았습니다.하지만 당신도 찾아보고 싶을 것입니다!


답변

구성 클래스의 @EnableWebMvc 주석으로 문제가 해결되었습니다. (Spring 5, web.xml 없음, AbstractAnnotationConfigDispatcherServletInitializer에 의해 초기화 됨)