복붙노트

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

SPRING

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

내 생각 엔 잭슨이 없기 때문에 객체를 JSON으로 변환 할 수 없다는 것이다. 왜 잭슨이 봄 부츠로 만들어 졌다고 생각했는지 이해할 수 없습니다.

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

<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>

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

고맙습니다

해결법

  1. ==============================

    1.문제는 Foo의 중첩 된 객체 중 하나에 getter / setter가 없었습니다.

    문제는 Foo의 중첩 된 객체 중 하나에 getter / setter가 없었습니다.

  2. ==============================

    2.pom.xml에 아래의 의존성을 추가하십시오 :

    pom.xml에 아래의 의존성을 추가하십시오 :

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.1</version>
    </dependency>
    
  3. ==============================

    3.@ResponseBody 및 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>
    
  4. ==============================

    4.오류 메시지에 언급 된 bean 내부에 getter / setter가없는 것을 추가하십시오.

    오류 메시지에 언급 된 bean 내부에 getter / setter가없는 것을 추가하십시오.

  5. ==============================

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

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

    공식 스프링 가이드를 살펴본 후 여기에 주어진 예제 (https://spring.io/guide/gs/actuator-service/)를 따랐습니다. 여기에 반환 된 객체의 JSON 형식으로의 변환도 나와 있습니다.

    나는 다시 자신 만의 프로젝트를 만들었습니다. 이번에는 위에서 언급 한 Official Spring Guide 예제의 pom.xml 파일에 의존성을 추가하고 플러그인을 빌드했습니다.

    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이 프로젝트를 설치하고 업데이트 할 때 나에게 효과가 없었습니다. 그래서 저는 처음부터 다시 프로젝트를 만들어야했습니다. 나는 내 프로젝트가 예제 프로젝트이기 때문에 그것에 대해별로 신경 쓰지 않았지만, 그 프로젝트를 찾고 싶을 수도있다.

  6. ==============================

    6.Spring 프레임 워크가 중첩 된 객체의 속성을 가져올 수 없기 때문에 문제가 발생했습니다. Getters / Setters는 하나의 해결 방법입니다. 이 속성이 실제로 문제가되는 경우 유효성을 검사하는 또 다른 빠르며 더러운 해결책입니다.

    Spring 프레임 워크가 중첩 된 객체의 속성을 가져올 수 없기 때문에 문제가 발생했습니다. Getters / Setters는 하나의 해결 방법입니다. 이 속성이 실제로 문제가되는 경우 유효성을 검사하는 또 다른 빠르며 더러운 해결책입니다.

  7. ==============================

    7.한동안 동일한 오류가 발생했습니다. 모든 속성에 대해 getter 메서드를 사용할 수 있는지 확인했습니다. 여전히 동일한 오류가 발생했습니다. 문제를 해결하려면 다음을 사용하여 MVC XML (구성)을 구성하십시오.

    한동안 동일한 오류가 발생했습니다. 모든 속성에 대해 getter 메서드를 사용할 수 있는지 확인했습니다. 여전히 동일한 오류가 발생했습니다. 문제를 해결하려면 다음을 사용하여 MVC XML (구성)을 구성하십시오.

     <mvc:annotation-driven/>
    

    이는 Spring이 jackson의 존재를 감지하고 해당 변환기를 설정하는 데 필요합니다.

  8. ==============================

    8.또한 실수로 두 개의 @JsonProperty ( "some_value") 동일한 선을 클래스 내의 다른 속성에 넣을 때 이러한 오류가 발생했습니다.

    또한 실수로 두 개의 @JsonProperty ( "some_value") 동일한 선을 클래스 내의 다른 속성에 넣을 때 이러한 오류가 발생했습니다.

  9. ==============================

    9.나는 오랜 시간 동안 동일한 문제에 직면했다. 객체 맵퍼 (Object Mapper)를 사용하여 객체를 JSON으로 변환하고이를 JSON 객체로 전달해야한다는 것을 알게되었다.

    나는 오랜 시간 동안 동일한 문제에 직면했다. 객체 맵퍼 (Object Mapper)를 사용하여 객체를 JSON으로 변환하고이를 JSON 객체로 전달해야한다는 것을 알게되었다.

        @RequestMapping(value = "/getTags", method = RequestMethod.GET)
        public @ResponseBody
        String getTags(@RequestParam String tagName) throws 
        JsonGenerationException, JsonMappingException, IOException {
        List<Tag> result = new ArrayList<Tag>();
        for (Tag tag : data) {if (tag.getTagName().contains(tagName)) {
                result.add(tag);
            }
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(result);
        return json;
        }
    
  10. ==============================

    10.필자의 경우, jackson-core.jar 라이브러리를 추가하는 것을 잊어 버렸고, 단지 jackson-annotations.jar와 jackson-databind.jar 만 추가했다. jackson-core.jar을 추가하면 문제가 해결되었습니다.

    필자의 경우, jackson-core.jar 라이브러리를 추가하는 것을 잊어 버렸고, 단지 jackson-annotations.jar와 jackson-databind.jar 만 추가했다. jackson-core.jar을 추가하면 문제가 해결되었습니다.

  11. from https://stackoverflow.com/questions/37841373/java-lang-illegalargumentexception-no-converter-found-for-return-value-of-type by cc-by-sa and MIT license