到目前为止,我已经成功地使用Apache Wink设置了基本的Web服务。根据提供的示例,这包括返回Atom,JSON,HTML,XHTML,XML和纯文本媒体类型。我还能够成功使用MessageBodyWriter“手动”生成XHTML输出。到目前为止,太好了。我很高兴通过现有的Wink机制返回大多数媒体类型。

我现在想做的是让返回的XHTML内容使用JSP。即,我想使用JSP作为输出模板,通过POJO作为参数发送来填充JSP中的字段。以下是我现在所掌握的一些伪代码。

@Path("{id}")
@GET
@Produces({MediaType.APPLICATION_XHTML_XML})
public Response getXhtml( @PathParam("id") String id )
{
    try {
        MyBean mybean = service.getBean(id);
        return Response.ok(new MyAsset(mybean))
                .location(new URI(baseurl+"Output.jsp"))
                .type(MediaType.APPLICATION_XHTML_XML).build();
    } catch ( Exception e ) {
        throw new WebApplicationException(e,Status.INTERNAL_SERVER_ERROR);
    }
}


似乎完全忽略了JSP。而且,如果我最终弄清楚了如何做,我将需要知道如何将POJO作为参数传递。我知道这里缺少一些东西,因为我假设Apache Wink可以与基于JSP的Web服务进行互操作。 Wink文档通常很好,但是我找不到任何东西。感谢您的协助,理想情况下是一个工作示例的链接。

最佳答案

没有内置机制可以将POJO作为参数传递。您需要自己构建URI。另外,我想您想将重定向发送到您的jsp,而不仅仅是200 OK。因此,您可以执行以下操作:

@Path("{id}")
@GET
@Produces({MediaType.APPLICATION_XHTML_XML})
public Response getXhtml( @PathParam("id") String id )
{
    try {
        MyBean mybean = service.getBean(id);
        return Response.seeOther(UriBuilder.fromUri(baseurl+"Output.jsp")
                 .replaceQuery(convertMyBeanToQuery(mybean)).build())
                .type(MediaType.APPLICATION_XHTML_XML).build();
    } catch ( Exception e ) {
        throw new WebApplicationException(e,Status.INTERNAL_SERVER_ERROR);
    }
}


您需要实现convertMyBeanToQuery来构建查询字符串:key=value&key1=value

您也可以使用UriBuilder.queryPatam逐个添加参数。

10-06 12:54
查看更多