0

REST API を使用して Spring MVC アプリケーションを開発しています。

私はコントローラにこのメソッドを持っています:

@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;
}

この get リクエストを行うと、次のようになります

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

このリクエスト パラメータを使用すると、次のようになります。

  • 受け入れる:アプリケーション/json
  • Accept-Encoding:gzip、deflate、sdch、br
  • Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
  • キャッシュ制御:キャッシュなし
  • Cookie:_ga=GA1.1.486025197.1475764350;JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
  • ホスト: ローカルホスト:8080
  • ユーザーエージェント:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/54.0.2840.71 Safari/537.36

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

しかし、パラメータ「roomId」を I1.A.122 から I1.A.123 に変更すると:

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

このリクエスト パラメータを使用すると、次のようになります。

  • 受け入れる:アプリケーション/json
  • Accept-Encoding:gzip、deflate、sdch、br
  • Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
  • キャッシュ制御:キャッシュなし
  • Cookie:_ga=GA1.1.486025197.1475764350; JSESSIONID=6716A5824088BC0F46A6B74D5FB25A3E
  • ホスト: ローカルホスト:8080
  • ユーザーエージェント:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (Gecko のような KHTML) Chrome/54.0.2840.71 Safari/537.36

エラー コード406 が表示されます - 受け入れられません

私はこの種のリクエストをプロジェクトのいたるところで使用していますが、この種の問題は一度もありませんでした. パラメータ「roomId」は通常の整数値のままです。Spring Mvc で問題を発生させるにはどうすればよいですか? ヘッダーと実行中のコードはまったく同じです。

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

よろしくお願いいたします。

4

1 に答える 1

0

私は一種の修正を見つけました。WebMvcConfigurerAdapter を拡張する Spring 構成を作成し、次のように「configureContentNegotiation」メソッドをオーバーライドしました。

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

このパラメーターを使用すると、完全に機能します。

しかし、部屋ID I1.A.122では機能し、部屋ID I1.A.123では機能しないことを説明できる理由はまだわかりません。

于 2016-11-14T08:32:00.103 に答える