Проект на SpringBoot 1.5.8, шаблоны Jade templates.
Добавляю загрузку/скачивание файлов.
Отдаю файл вот таким методом:
@GetMapping(value = "/{fileId:[\\d]+}", produces = APPLICATION_OCTET_STREAM_VALUE)
@ExceptionHandler(value = FileNotFoundException.class)
public @ResponseBody
HttpEntity<byte[]> getFileById(@PathVariable Long fileId, final HttpServletResponse response) throws IOException {
Assert.notNull(fileId);
StoredFile file = this.storageService.getFileById(fileId);
if (file == null) {
response.sendError(404, String.format("File %s not found", fileId));
return null;
}
byte[] content;
try {
content = this.storageService.getFileContent(file.getPath());
} catch (IOException e) {
e.printStackTrace();
if (this.userService.currentUser().isAdmin()) {
response.sendError(404, String.format("File %s (%s) not found", file.getName(), file.getPath()));
} else {
response.sendError(404, String.format("File %s not found", file.getName()));
}
return null;
}
HttpHeaders header = new HttpHeaders();
header.setContentType(APPLICATION_OCTET_STREAM);
header.set("Content-Disposition", "inline; filename=" + file.getName());
header.setContentLength(file.getSize());
return new HttpEntity<byte[]>(content, header);
}
Когда дергаю файл, он успешно отдается в браузер, но в логе имею портянку ошибок.
Прикладываю еще WebConfig на случай, т.к. ошибка из него произрастает.
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Qualifier("viewHelper")
@Autowired
private ViewHelper viewHelper;
@Autowired
private Environment env;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/webjars/**")
.addResourceLocations("/webjars/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(viewObjectAddingInterceptor());
super.addInterceptors(registry);
}
@PostConstruct
public void registerJadeViewHelpers(){
viewHelper.setApplicationEnv(this.getApplicationEnv());
}
@Bean
public HandlerInterceptor viewObjectAddingInterceptor() {
return new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
viewHelper.setStartTime(System.currentTimeMillis());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView view) {
CsrfToken token = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
if (token != null) {
view.addObject(token.getParameterName(), token); // ВОТ ТУТ ОШИБКА НАЧИНАЕТСЯ
}
}
};
}
public String getApplicationEnv(){
return this.env.acceptsProfiles(ENV_PRODUCTION) ? ENV_PRODUCTION : ENV_DEVELOPMENT;
}
}
Стек эксепшенов тут: https://pastebin.com/HcraFKTT
PS. мой вопрос в сабже