4

REST、Spring MVC に次のコードがあります。このコードは、ResponseText と呼ばれる JSON 型のデータ構造を返すことになっています。

@RequestMapping(value="/movieTheater", headers = {"ACCEPT=*/*"}, method=RequestMethod.GET)
public @ResponseBody ResponseText getCustomerInput(@RequestParam("name") String name, @RequestParam("price") Double price) {
    Transaction transaction = new Transaction();
    ResponseText result = new ResponseText();

    transaction.setMovieName(name);
    transaction.setTicketPrice(price);
    transaction.setDatetime(new Date());

    if(transactionService.addTransaction(transaction))
        result.setMessage(ResponseStatus.SUCCESS.getStatus());
    else
        result.setMessage(ResponseStatus.FAILED.getStatus());
    return result;
} 

しかし、ブラウザで以下の URL を介してこのコードを実行すると、以下のエラーが発生します。

URL:

http://localhost:8080/SpringMVCMerchant/movieTheater.htm?name=Smurfs&price=300.00

エラー:

HTTP Status 406 -

type Status report

message

description The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers.

ここで何が間違っているのかを特定できません。このエラーを説明するためにネットを調べましたが、何が欠けているのかまだわかりません。ACCEPT=" / " を指定しましたが、これはあらゆる種類の応答をカバーするはずですよね? 助けてください!前もって感謝します!

** ヘッダーを追加したとき

headers={"Accept: application/json, text/javascript"} 

上記の代わりに、次のエラーが発生しました。

HTTP Status 405 - Request method 'GET' not supported
4

6 に答える 6

3

このエラーに直面.htmlし、リクエスト URL に誤って追加されたサフィックスを削除すると、このエラーは解決されました!

于 2014-09-19T12:53:58.463 に答える
2

「jackson」依存関係を pom.xml に追加してみてください (または、maven を使用しない場合は適切な jar を追加してください)。

<dependency>
   <groupId>org.codehaus.jackson</groupId>
   <artifactId>jackson-mapper-asl</artifactId>
   <version>1.7.1</version>
</dependency>

このライブラリがないと、String または String 標準型に類似したもののみを返すことができます

于 2013-08-11T17:50:10.513 に答える
1

カスタム ヘッダーを設定するのではなく、アノテーションのproduces属性を介して生成できる型を定義する必要があります。@RequestMapping

@RequestMapping(value="/movieTheater", method=RequestMethod.GET, produces={"application/json","application/xml"})
public @ResponseBody ResponseText getCustomerInput(@RequestParam("name") String name, @RequestParam("price") Double price) {
    // ...
}

produces実際に生成できる型を指定して、属性に具体的な型のみを設定する必要があることに注意してください。ファイルを提供し、MIME タイプを決定するために実際の作業を行っていない限り、何かを生成すると主張しても、実際にはそれほど役に立ちません。JSON および XML としてシリアライズすることは非常に一般的なオプションですが、ビデオ ストリームとしてシリアライズすることはあまり一般的ではありません。

適切なメッセージ コンバータも必要です。

于 2013-08-11T17:45:54.357 に答える
0

私にとっての問題は、コンテキスト注釈の駆動を含めたことです。

<context:annotation-config/>

しかし、ドリブンの mvc アノテーションを含めるのを忘れていました:

<mvc:annotation-driven/> 

この場合、なんらかの理由で、Spring が関連する406代わりに返され404ます。方法がわからない。

サーブレットの <mvc:annotation-driven /> と <context:annotation-config /> の違いは何ですか?

于 2016-08-06T11:33:09.227 に答える