コントローラー メソッドを呼び出す前に、次の要求のファイル拡張子 (.jpg) が削除されている理由がわかりません。
GET http://blah.com/assets/picture.jpg
パス拡張を優先しないようにコンテンツ ネゴシエーションを設定しました。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.blah" })
public class PlatformWebAppConfig extends WebMvcConfigurerAdapter {
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false);
configurer.favorParameter(false);
configurer.useJaf(false);
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
私のコントローラーはこれです:
@Controller
public class FileUploadRestApi {
@RequestMapping(
value = "/assets/{filename}",
method = RequestMethod.GET)
public void downloadFile(HttpServletResponse response,
@PathVariable("filename") String filename,
Principal principal) {
// ERROR: 'filename' has extension stripped !!!!
}
}
PlatformWebAppConfig
また、上記のクラスに以下を追加しようとしましたが、うまくいきませんでした:
@Override
public void configurePathMatch(PathMatchConfigurer matcher) {
matcher.setUseSuffixPatternMatch(true);
matcher.setUseRegisteredSuffixPatternMatch(true);
}
私は問題をデバッグしようとしましたが、設定が false であり、コンテンツ ネゴシエーション戦略が設定されていないことContentNegotiationManagerFactoryBean.afterPropertiesSet
は間違いありません (予想どおり)。favorPathExtension
アップデート:
リクエストのマッピングを
"/assets/{filename:.+}"
ファイル名には拡張子が含まれますが、これは、これらすべての構成ツールを設定しても何も達成されなかった理由を説明していません????