0

http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=次のようなリクエスト ハンドラーを使用して、Spring Boot アプリケーション RestController をGET を呼び出すと、次のようになります。

  @RequestMapping("/things/{thingId}")
  public ResponseEntity<Thing> getThing(
      @PathVariable String thingId) {

    System.out.println("thingId=" + thingId);
  ...

ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=私が期待していたものではなく、次のように出力されZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=ます。

ご覧のとおり、プラスがスペースに変わります。これは、パス部分では発生せず、クエリ部分のみで発生するはずです。これが、URL を作成するために使用している SpringUriComponentsBuilder.build().encode()がプラスを に変えない理由です%2B

エンコードされたスラッシュ (/) を機能させるには、アプリケーションを微調整する必要がありました。詳細については、URL の ID に %2F が含まれている場合、REST エンドポイントに到達できないを参照してください。

Tomcat 埋め込み 8.5.11 を使用する SpringBoot 1.4.4.RELEASE を使用しています。
Spring RestTemplate、Postman、および Chrome からサービスを呼び出してみました。すべての場合で同じ結果、プラスはスペースに変わります

4

1 に答える 1

1

I was able to resolve after identifying that my IDE had automagically added spring-boot-starter-undertow to the POM file. I did not exclude spring-boot-starter-tomcat from spring-boot-starter-web so I'm not sure what was happening under the covers but removing the spring-boot-starter-undertow dependency fixed the issue.

于 2017-03-03T01:18:15.017 に答える