Как вернуть фактический html-файл с помощью JAX-RS
до сих пор я возвращаю html мою домашнюю страницу:
@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
return "<html>...</html>";
}
что я хочу сделать, это вернуться домой.сам html, а не копирование его содержимого и возврат строки вместо этого.
Как это сделать? спасибо :)
4 ответов
вы можете просто вернуть экземпляр java.io.InputStream
или java.io.Reader
- JAX-RS сделает правильную вещь.
@GET
@Produces({MediaType.TEXT_HTML})
public InputStream viewHome()
{
File f = getFileFromSomewhere();
return new FileInputStream(f);
}
Это мой предпочтительный способ обслуживания веб-страницы с помощью JAX-RS. Ресурсы для веб-страницы (html, css, изображения, js и др.) помещаются в main/java/resources
, который должен развернуть их в WEB-INF/classes
(требует некоторой настройки в зависимости от того, как вы создали свой проект). Инъекция ServletContext
в свой сервис и использовать его, чтобы найти файл и вернуть его как InputStream
. Я включил полный пример ниже Для справки.
@Path("/home")
public class HomeService {
@Context
ServletContext servletContext;
@Path("/{path: .+}")
@GET
public InputStream getFile(@PathParam("path") String path) {
try {
String base = servletContext.getRealPath("/WEB-INF/classes/files");
File f = new File(String.format("%s/%s", base, path));
return new FileInputStream(f);
} catch (FileNotFoundException e) {
// log the error?
return null;
}
}
}
можно использовать HtmlEasy который построен поверх RestEasy, что является действительно хорошей реализацией Jax-RS.