到目前为止,我已经成功地使用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
逐个添加参数。