У меня есть некоторые webservice
конечные точки, которые должны предлагать json
данные по умолчанию. Поэтому настройте следующим образом:
@Configuration
public class ContentNegotiationConfiguration implements WebMvcConfigurer {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON);
}
}
Проблема: теперь я хочу создать конечную точку, которая предлагает загрузку файла (таким образом, это не json).
@RestController
public class FileServlet {
@GetMapping(value = "/docs/{filename}", consumes = MediaType.ALL_VALUE, produces = APPLICATION_OCTET_STREAM_VALUE)
public Object download(@Pathvariable filename) {
File file = fileservice.resolve(filename);
return new FileSystemResource(file);
}
}
Доступ к этой конечной точке из браузера работает нормально. Я могу скачать файлы.
Но: при использовании собственных клиентов, которые не устанавливают заголовки http, такие как тип контента, заголовок accept и т. Д., Доступ завершается неудачно с помощью:
WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver: Resolved
[org.springframework.web.HttpMediaTypeNotAcceptableException:
Could not find acceptable representation]
Все они приводят к исключению:
curl localhost:8080/docs/testfile.txt
curl -O localhost:8080/docs/testfile.txt
wget localhost:8080/docs/testfile.txt
Это, вероятно, потому что я установил тип содержимого по умолчанию на json
выше в ContentNegotiationConfiguration
. Я не могу изменить это из-за всех других конечных точек, которые по умолчанию должны быть json.
Вопрос: как я могу явно игнорировать настройку json по умолчанию для этой единственной конечной точки и всегда просто предлагать поток загрузки?