1

Apache slingとともにNeba ライブラリを使用しています。

これで、私のスプリング コントローラーはこのコードで正常に動作します。

@RestController
public class CategoryController {
    @RequestMapping(value = "/category/list", method = RequestMethod.GET)
    public String sayHello() {
        return "Hello World!";
    }
}

URL http://localhost:8080/bin/mvc.do/category/list にアクセスした後

「 Hello World!」という応答が返ってきます。

しかし、私がこのようにリスト文字列を返そうとしているとき -

@RestController
public class CategoryController {
    @RequestMapping(value = "/category/list", method = RequestMethod.GET)
    public List<String> sayHello() {
        return new Arrays.asList(new String[]{"A","B","C"});
    }
}

次の例外が発生しています-

java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.Arrays$ArrayList

私のライブラリにはジャクソンのデータバインドがあります

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

libにこれらのライブラリがあるbundle jarも確認しました。なぜそれが機能しないのかはまだわかりません。どんな助けも非常に高く評価されています。

4

2 に答える 2

1

コントローラー応答からの JSON 変換に対する Spring のサポートを有効にするには、jackson-databind、jackson-core、jackson-annotations バンドルをデプロイします。次に、Spring はこれらのバンドルを取得し (これには Sling の更新/再起動が必要になる場合があります)、@Controller のメソッドによって返されたオブジェクトを JSON に変換するために jackson を使用する新しいメッセージ コンバーターを自動的に追加します。次に例を示します。

@RestController
public class CategoryController {
    @RequestMapping(value = "/category/list", method = RequestMethod.GET)
    public List<String> sayHello() {
        return Arrays.asList("A","B","C");
    }
}

注: 実際にデプロイする必要があるのは、これらの jackson バンドルです。NEBA に同梱されている Spring バンドルには、jackson へのオプションの require-bundle (import-package ではない) 依存関係があるため、jackson パッケージの可用性だけでは十分ではありません (その理由については、neba-155を参照してください)。

NEBA サンプル プロジェクトに jackson バンドルが含まれるようになったため、これを開始点として使用して、コントローラーの応答からの自動 JSON 変換を試すことができます。

上記のティムのコメントに関しては、手動で変換する必要はありません。Spring MVC は、リクエストの「Accept」ヘッダーと利用可能な Spring メッセージ コンバーターを介したコンテンツ ネゴシエーションに基づいて、これを自動的に行うことができます。Spring ドキュメントの$ 28.10.2 HTTP メッセージ変換を参照してください。

それが役立つことを願っています!

于 2016-12-08T12:54:10.633 に答える