web-dev-qa-db-ja.com

@ResponseBodyを使用してSpring ControllerからJSONデータを返す方法

春バージョン4.2.0、Hibernate 4.1.4ここに私のController関数があります:

@RequestMapping(value = "/mobile/getcomp", method = RequestMethod.GET)
@ResponseBody
public List<Company>  listforCompanies() {      
    List<Company> listOfCompanies= new ArrayList<Company>();        
    listOfCompanies = companyManager.getAllCompanies();
    return listOfCompanies;
}

Pom.xmlのJackson JSONマッパーの依存関係:

    <!-- Jackson JSON Mapper -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
    </dependency>

ArrayListのリストを取得しますが、次のエラーが返されたときに表示されます。

SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [/IrApp] threw exception [Request processing failed; nested exception is Java.lang.IllegalArgumentException: No converter found for return value of type: class Java.util.ArrayList] with root cause
    Java.lang.IllegalArgumentException: No converter found for return value of type: class Java.util.ArrayList
        at org.springframework.util.Assert.isTrue(Assert.Java:68)
        at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.Java:124)

リンク 私がフォローしている例に。

45
Zahid Khan

以下の依存関係をpom.xmlに追加します。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.0</version>
</dependency>
100
Arpit

私は同じ問題に直面していました。 @ResponseBodyを使用していたため、@RestControllerを入れませんでした。ただし、Companyクラスにgetter/setterメソッドを指定しなかったため、エラーが発生していました。 getter/setterを追加した後、私の問題は解決しました。

86
LynAs

また、返されたBeanが空でないことを確認する必要があります(ジャクソンがシリアル化できる)。私の特定のケースでは、ゲッターとセッターなしで、ジャクソン注釈なしで、フィールドがnullに等しいオブジェクトのインスタンスを返そうとしました。私は次のメッセージを受け取りました:

com.fasterxml.jackson.databind.JsonMappingException:
    No serializer found for class com.foo.bar.Baz and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
9
ashirman

この問題に直面したとき、単にゲッターセッターメソッドを配置するだけで、問題は解決しました。

Springブートバージョン2.0を使用しています。

6
arvind-dhariwal

@Arpitの答えを考えると、私にとっては2つのジャクソンの依存関係を追加したときにのみ機能しました:

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

そして、原因はweb.xml <mvc:annotation-driven/>です。

私を助けた元の答えはここにあります: https://stackoverflow.com/a/33896080/3014866

3
Rudziankoŭ

Groovy + springbootを使用していて、このエラーが発生しました。

以下の依存関係を使用している場合、ゲッター/セッターを追加するだけで十分です。

implementation 'org.springframework.boot:spring-boot-starter-web'

ジャクソンのコアクラスに付属しています。

1
Arvind Maurya

私の場合、jackson-databind-2.8.8.jarと互換性のないJDK 1.6を使用していました。使用する必要があるため、Springはこのコンバーターをロードしていませんでした。バージョンをダウングレードしましたが、現在は機能しています。

0
IsidroGH