可在 JAX-RS 中查看

问题描述 投票:0回答:2

在我们之前的项目中,我们使用了Viewable(当时我们有 Jersey 作为 JAX-RS 的实现)。现在我们想在 WebSphere 8.5 中运行它。它是一个JEE6服务器,JAX-RS默认不支持Viewable。由于那里使用了 JAX-RS Apache Wink 的实现。

将答案作为 HTML 与内部对象的最佳方式是什么?我们想使用渲染引擎。

谢谢罗伯特

jax-rs apache-wink jersey-1.0
2个回答
1
投票

如果您需要显示简单的jsp页面,您只需注入请求并执行正常的转发,如下所示:

@Path("/service")
public class RestService {

    @Context
    HttpServletRequest request;
    @Context
    HttpServletResponse response;


    @GET
    @Path("/getPage")
    public void getPage() {
        try {
            request.getRequestDispatcher("/mypage.jsp").forward(request, response);
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
} 

0
投票

编写您自己的

Viewable
,然后编写一个知道如何使用渲染引擎渲染它的
MessageBodyWriter<Viewable>

例如,我写了这样的:

public record Viewable(String templateName, Map<String, Object> parameters) {}

然后是这个(省略了与模板无关的细节):

@Provider
@Produces(MediaType.TEXT_HTML)
public class ViewableMessageBodyWriter implements MessageBodyWriter<Viewable> {

    @Override
    public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
        return type.equals(Viewable.class) && mediaType.equals(MediaType.TEXT_HTML_TYPE);
    }

    @Override
    public void writeTo(Viewable viewable, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> headers, OutputStream body) throws IOException, WebApplicationException {
        String templateFileName = viewable.templateName() + ".html";
        Map<String, Object> parameters = viewable.parameters();
        try (Writer out = new OutputStreamWriter(body)) {
            // load the template file, run the templating engine, and write the result to the output writer
        }
    }

}

在 Helidon MP 4.0.5 下运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.