2016-11-11 4 views
0

REST APIを使用してSpring MVCアプリケーションを開発します。このリクエストのパラメータを持つSpring MVC - 特定のURLパラメータを持つエラーコード406

http://localhost:8080/api/activities/roomId/I1.A.122?timestamp=2016-11-11T12:02:34.421+0100&pageSize=10

:私はこの取得要求作るとき

@RequestMapping(value="/roomId/{roomId}",produces = "application/json") 
public List<DayStatisticDto> findBySiteAndRoom(@PathVariable("roomId") String roomId, @RequestParam("timestamp") String timestamp, @RequestParam("pageSize") Integer pageSize) throws ParseException { 
    List<DayStatisticDto> dayStatisticDtos = dayStatisticService.latestDailyStatisticsForRoom(getCurrentUserSiteCode(), roomId, pageSize, timestamp, false); 
    return dayStatisticDtos; 
} 

私は、コントローラ内でこのメソッドを持って

  • を受け入れます:アプリケーション/ json
  • 受け入れエンコード:GZIPは、BR、SDCHを収縮
  • 受け入れ-言語:FR-FR、FR; Q = 0.8、EN-US; Q = 0.6、EN; Q = 0.4
  • のCache-Control :キャッシュなし
  • クッキー:_ga = GA1.1.486025197.1475764350; JSESSIONID = 6716A5824088BC0F46A6B74D5FB25A3E
  • ホスト:localhostを:8080
  • のUser-Agent:Mozillaの/ 5.0(Macintosh版。インテルのMac OS X 10_11_6)のAppleWebKit/537.36(KHTML、ヤモリなど)クローム/ 54.0.2840.71 Safariは/

537.36は私が応答として正しいJSONオブジェクトを取得します。

しかし、私はI1.A.122からI1.A.123に "roomId" パラメータを変更した場合:このリクエストのパラメータを持つ

http://localhost:8080/api/activities/roomId/I1.A.123?timestamp=2016-11-11T12:02:34.421+0100&pageSize=10

  • 受け入れます。アプリケーション/ json
  • アクセプトエンコーディング:gzip、deflate、sdch、br
  • Accept-Language:fr-FR、frキャッシュコントロール:ノーキャッシュ
  • クッキー:_ga = GA1.1.486025197.1475764350; q = 0.8、en-US; q = 0.6、ja; q = 0.4; JSESSIONID = 6716A5824088BC0F46A6B74D5FB25A3E
  • ホスト:localhostを:8080
  • のUser-Agent:Mozillaの/ 5.0(Macintosh版、インテルのMac OS X 10_11_6)のAppleWebKit/537.36(KHTML、ヤモリなど)クローム/ 54.0.2840.71サファリ/ 537.36

私は、エラーコード406を受け取る - 許容できない

私が挙にどこでも要求のこの種を使用して、私はこの種の問題を持っていませんでした。パラメータ "roomId"は依然として通常の整数値です。 Spring Mvcでどのように問題を発生させることができますか?ヘッダーと実行コードはまったく同じです。

"findBySiteAndRoom"メソッドの最初の行にブレークポイントを置くと、最初のケースではポイントに到達します。しかし、2番目のケースでは、ブレークポイントに達する前に406エラーコードを返します。

ご協力いただきありがとうございます。

+0

roomVariableではなくrequestparamでルームIDを渡すと、roomId I.1A.123で動作します:http:// localhost:8080/api/activities/room?roomId = I1.A.123&timestamp = 2016 -11-11T12:02:34.421 + 0100&pageSize = 1 roomIdの後に余分な単語を追加すると、Id I1.A.213:http:// localhost:8080/api/activities/room/I1.A.123/test?timestamp = 2016-11-11T12:02:34.421 + 0100&pageSize = 1 これをどのように説明できますか? Spring MVCのバグですか? –

+0

roomId値の直後に "/"を追加すると、http:// localhost:8080/api/activities/roomId /I1.A.123/?timestamp = 2016-11-11T12:02:34.421 + 0100&pageSize = 10 –

+0

@RequestMapping(value = "/ roomId/{roomId}"、生成する= "application/json") または @RequestMapping(value = "/ room/{roomId}"、 "application/json")? (roomId vs room) – kuhajeyan

答えて

0

私はある種の修正を見つけました。私はWebMvcConfigurerAdapterを拡張春の設定を作成し、私はこのような「configureContentNegotiation」メソッドオーバーライド:それは完璧に動作し、このパラメータを

@Override 
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
    configurer.favorPathExtension(false); 
} 

を。

しかし、私はまだ部屋ID I1.A.122でそれが働き、部屋ID I1.A.123でそれがうまくいかないことを説明することができないと理解していません。

関連する問題