Я не понимаю, почему css не работает (я уже следовал тому, что сказано в этой теме ). У меня есть следующая структура файлов для моих ресурсов:
resources
- static
-style
style.css
- templates:
- CV.html
В шаблоне я проверил, что URL сгенерирован правильно, это так. CSS также корректно обслуживается: когда я использую сгенерированный URL в браузере, файл CSS подается.
Код моего шаблона:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" lang="fr">
<head>
<title>CV ARSENE LAPOSTOLET</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link type="stylesheet" href="../static/css/style.css" th:href="@{|${baseUrl}/css/style.css|}"/>
</head>
<body>
<span th:text="|${baseUrl}/css/style.css|"></span>
<!--/*@thymesVar id="abilities" type="List<Ability>"*/-->
<div class="rouge" th:each="ability: ${abilities}">
<span th:text="${ability.getName()}"></span>
</div>
</body>
</html>
Мой Java код:
@RestController
@RequestMapping("/cv")
@AllArgsConstructor
public class CvController {
private CvService cvService;
private AbilityRepository abilityRepository;
private ServletContext servletContext;
@GetMapping("")
public ResponseEntity<Resource> getCv(HttpServletRequest servletRequest, HttpServletResponse servletResponse){
Locale locale = getLocale(servletRequest);
WebContext context = new WebContext(servletRequest, servletResponse, servletContext, locale);
context.setVariable("abilities", abilityRepository.findAll());
context.setVariable("baseUrl",getCurrentBaseUrl());
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType("application/pdf"))
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + "CV_ARSENE_LAPOSTOLET.pdf" + "\"")
.body(new ByteArrayResource(cvService.renderCv(context)));
}
private static String getCurrentBaseUrl() {
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest req = sra.getRequest();
return req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
}
}
@Service
@AllArgsConstructor
@CommonsLog
public class CvService {
private TemplateEngine templateEngine;
public byte[] renderCv(WebContext ctx) {
String processedHtml = templateEngine.process("CV", ctx);
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(processedHtml);
renderer.layout();
renderer.createPDF(os);
return os.toByteArray();
} catch (DocumentException | IOException e) {
e.printStackTrace();
return null;
}
}
}