Как вернуть фактический html файл с помощью JAX-RS

до сих пор я возвращаю html свою домашнюю страницу:

@GET
@Produces({MediaType.TEXT_HTML})
public String viewHome()
{
   return "<html>...</html>";
}

то, что я хочу сделать, это вернуть home.html и не копировать его содержимое и вместо этого возвращать строку.

Как мне это сделать? спасибо:)

Ответ 1

Вы можете просто вернуть экземпляр java.io.InputStream или java.io.Reader - JAX-RS выполнит правильные действия.

@GET
@Produces({MediaType.TEXT_HTML})
public InputStream viewHome()
{
   File f = getFileFromSomewhere();
   return new FileInputStream(f);
}

Ответ 2

  • Прочитайте файл с помощью getResourceAsStream
  • записать обратно в возвращенную строку.

Ответ 3

Вы можете использовать HtmlEasy, который построен поверх RestEasy, что является действительно хорошей реализацией Jax-RS.

Ответ 4

Это мой предпочтительный способ обслуживания веб-страницы с помощью JAX-RS. Ресурсы для веб-страницы (html, css, images, 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;
        }
    }
}