泽西岛可见 Json
Jersey Viewable with Json
JAX-RS 实现 Jersey 通过 Viewable class 支持 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 docs on this topic for a tutorial on how to register these. A quick summary is: 1) implement ExceptionMapper
和 2) 将 class 注册为提供商。
对于初学者,我建议创建一个映射到通用 HTTP codes 的简单套件。例如:
NotFoundException
- returns 404 响应,在请求单个实体但未找到时使用。
InvalidInputException
- returns 422 响应,当请求未通过验证时使用(例如尝试在电子邮件字段中保存 phone 号码)。
BadRequestException
- 通常框架会为您处理这些情况,但如果没有,Bad Request 就是格式不正确的请求。因此,如果缺少必需的 header,或者客户端在仅允许单个实体时尝试保存 collection。
Exception
* - 这里有一个星号,因为意外异常通常是由于服务器错误引起的,所以 500 是一个合适的默认响应。您可能 想要创建全局未捕获异常处理程序的一个原因是防止在响应 body 中返回堆栈跟踪。出于安全原因,这可能很糟糕。
视图和模型
如果您使用 Viewable
object,则不需要 @Template
注释。此外,Viewable
期望模板作为第一个参数,模型(地图)作为第二个参数。该模型应具有与 JSP 中的变量匹配的键。现在,您的方法将在 web.xml 中设置的任何模板配置的根目录中查找名为 test.jsp
的文件。如果将所有这些都考虑在内,您的方法可能如下所示:
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable getMobileReport() {
return new Viewable("/test", service.getMobileReport(id));
}
JAX-RS 实现 Jersey 通过 Viewable class 支持 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 docs on this topic for a tutorial on how to register these. A quick summary is: 1) implement ExceptionMapper
和 2) 将 class 注册为提供商。
对于初学者,我建议创建一个映射到通用 HTTP codes 的简单套件。例如:
NotFoundException
- returns 404 响应,在请求单个实体但未找到时使用。InvalidInputException
- returns 422 响应,当请求未通过验证时使用(例如尝试在电子邮件字段中保存 phone 号码)。BadRequestException
- 通常框架会为您处理这些情况,但如果没有,Bad Request 就是格式不正确的请求。因此,如果缺少必需的 header,或者客户端在仅允许单个实体时尝试保存 collection。Exception
* - 这里有一个星号,因为意外异常通常是由于服务器错误引起的,所以 500 是一个合适的默认响应。您可能 想要创建全局未捕获异常处理程序的一个原因是防止在响应 body 中返回堆栈跟踪。出于安全原因,这可能很糟糕。
视图和模型
如果您使用 Viewable
object,则不需要 @Template
注释。此外,Viewable
期望模板作为第一个参数,模型(地图)作为第二个参数。该模型应具有与 JSP 中的变量匹配的键。现在,您的方法将在 web.xml 中设置的任何模板配置的根目录中查找名为 test.jsp
的文件。如果将所有这些都考虑在内,您的方法可能如下所示:
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable getMobileReport() {
return new Viewable("/test", service.getMobileReport(id));
}