Как вернуть фактический 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);
}

  1. читать файл с помощью getResourceAsStream
  2. пиши возвращаемой строки.

Это мой предпочтительный способ обслуживания веб-страницы с помощью 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.