我有一个像 fileName
@GetMapping(value = ["/test/{fileName:.+}"], produces = [(MediaType.APPLICATION_JSON_VALUE)])
fun getFile(@PathVariable fileName: String): ResponseEntity<Map<String, String>> {
return ResponseEntity.ok(hashMapOf(Pair("fileName", fileName)))
}
我有一些奇怪的行为,即
/test/item-1.exx
结果称为{"fileName": "item-1.exx"}
/test/item-1.855
结果称为{"fileName": "item-1.855"}
/test/item-1.pn8
结果称为{"fileName": "item-1.pn8"}
但如果我尝试使用有效扩展名调用该方法,我会 406 Not Acceptable
。
/test/item-1.png
结果称为 406 Not Acceptable
/test/item-1.jpg
结果称为 406 Not Acceptable
/test/item-1.exe
结果称为 406 Not Acceptable
我得到以下异常
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
如何解决这个问题?我希望能够使用有效的扩展名调用该方法。
答案 0 :(得分:1)
这是因为内容协商,只是尝试将Content-Type
添加到请求标头,它应该解决此问题,或禁用内容协商。看看这个链接:https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc
答案 1 :(得分:0)
@Jaiwo99的回答让我暗示需要做些什么。这是我找到的解决方案。
解决方案1:配置ContentNegotiation
@Bean
public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer
.useJaf(false)
.defaultContentType(MediaType.APPLICATION_JSON);
}
};
}
解决方案2:编辑application.yml / application.properties
spring:
mvc:
media-types:
png: application/json
jpg: application/json
jpeg: application/json