1

編集-これは解決されました、エラーは私の春の構成にありました。<mvc:annotation-driven/>私はタグを逃していました。追加すると、すべてが期待どおりに機能しました。

Spring MVCを使用して、リクエストのコンテンツタイプがである場合にのみHTTP GETアドレスへのリクエストを受け入れるコントローラーを定義しました。また、データを返すため、その形式のデータを受け入れるリクエストのみが通過する必要があります。ただし、これは機能しません。/controllertestapplication/jsonapplication/json

これはSpring3.2.0を使用した私のコードです。

package test.controllers;

import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/controllertest")
public class TestController {

    @RequestMapping(method = GET, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    @ResponseBody
    public String helloJSON() {
        return "{\"message\":\"HelloWorld\"}";  
    }

}

これは私が期待することです:

  1. 応答GETを受け取る以外のHTTPメソッドを使用する場合405 - Method not allowed
  2. 受け入れないリクエストを送信した場合、応答application/jsonを受け取る必要があります。406 Not Acceptable
  3. 私以外のContent-Typeでリクエストを送信すると、応答application/jsonを受け取る必要があります。415 Unsupported Media Type

これが実際の結果です。

  1. 私は実際に取得し405 - Method not allowedます。非常に素晴らしい。
  2. Acceptヘッダー付きのリクエストを送信すると、応答が返されます。メソッドが生成するのは。だけですがtext/xml200 - OK応答のコンテンツタイプはです。text/xmlapplication/json
  3. コンテンツタイプがであるリクエストを送信するとtext/xml200 - OK応答が返されます。

私はこれらすべてをジャージーで実装し、結果はすべて正しかったと付け加えるかもしれません。

4

1 に答える 1

0

Spring 3.2では、動作は説明した内容に沿っています。ただし、2では406ではなく405(メソッドは許可されていません)を取得しました。これらのテストに使用しているSpringのバージョンと、実行可能かどうかを確認できますか?少なくとも3.10+にアップグレードして、この動作をもう一度確認してください。

于 2012-12-28T20:05:27.187 に答える