[英]Jersey Viewable with Json
JAX-RS实现Jersey通过Viewable类支持MVC样式的Web应用程序,该类是模板名称和模型对象的容器。 它的用法如下:
@GET
@Template
@Produces({MediaType.TEXT_HTML})
public Viewable get() {
JsonObject response = null;
try{
response = service.getDetails(id);
}
catch(Exception ex) {
log.error("failed to get details", ex);
throw ex;
}
return new Viewable("/test", response);
}
这是从Viewable发送json的正确方法吗? 有没有一种方法可以显式设置json对象?
几件事:我没有特别使用Viewable
经验,但是我对JAX-RS很熟悉,可能会以自己的方式抛出几个指针。
JAX-RS定义了将异常映射到响应的功能。 此功能非常适合从资源代码中删除那些异常块。 查看有关此主题的Jersey文档 ,以获取有关如何注册这些内容的教程。 一个简短的摘要是:1)实现ExceptionMapper
和2)将类注册为提供程序。
对于初学者,我建议创建一个映射到常见HTTP代码的简单套件。 例如:
NotFoundException
返回404响应,并在请求但未找到单个实体时使用。 InvalidInputException
返回422响应,并在请求未通过验证时使用(例如尝试将电话号码保存在电子邮件字段中)。 BadRequestException
通常,框架将为您处理这些情况,但如果不是,则Bad Request的格式不正确。 因此,如果缺少必需的标头,或者当客户端仅允许单个实体时尝试保存集合。 Exception
*-这里有一个星号,因为意外异常通常是由于服务器错误引起的,因此500是适当的默认响应。 您可能要创建全局未捕获的异常处理程序的原因是为了防止在响应主体中返回stacktrace。 出于安全原因,这可能很糟糕。 你不应该需要@Template
如果您使用的是标注Viewable
对象。 此外, Viewable
期望模板作为第一个参数,而模型(映射)作为第二个参数。 该模型应具有与JSP中的变量匹配的键。 现在,您的方法将在web.xml中设置模板配置的根目录中查找一个名为test.jsp
的文件。 如果考虑到所有这些,您的方法可能看起来像这样:
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable getMobileReport() {
return new Viewable("/test", service.getMobileReport(id));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.