【问题标题】:Jersey Viewable with Json使用 Json 可查看泽西岛
【发布时间】:2016-06-30 06:41:26
【问题描述】:

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 对象?

【问题讨论】:

    标签: java json backbone.js jersey


    【解决方案1】:

    有几件事:我没有任何使用 Viewable 的经验,但我对 JAX-RS 很熟悉,可能会给你一些建议。

    异常处理程序

    JAX-RS 定义了将异常映射到响应的功能。此功能非常适合从资源代码中删除这些异常块。查看有关此主题的 Jersey docs 以获取有关如何注册这些的教程。简要总结如下:1) 实现 ExceptionMapper 和 2) 将类注册为 Provider。

    对于初学者,我建议创建一个简单的套件来映射到常见的HTTP codes。例如:

    • NotFoundException - 返回 404 响应,在请求单个实体但未找到时使用。
    • InvalidInputException - 返回 422 响应并在请求未通过验证时使用(例如尝试在电子邮件字段中保存电话号码)。
    • BadRequestException - 通常框架会为您处理这些情况,但如果没有,错误请求就是格式不正确的请求。因此,如果缺少必需的标头,或者客户端尝试在仅允许单个实体时保存集合。
    • Exception* - 这里有一个星号,因为意外的异常通常是由于服务器错误,所以 500 是一个合适的默认响应。您可能想要创建全局未捕获异常处理程序的一个原因是防止堆栈跟踪在响应正文中返回。出于安全原因,这可能很糟糕。

    视图和模型

    如果您使用Viewable 对象,则不需要@Template 注释。此外,Viewable 期望模板作为第一个参数,模型(映射)作为第二个参数。该模型应该具有与您的 JSP 中的变量匹配的键。现在,您的方法将在 web.xml 中模板配置设置的任何根目录中查找名为 test.jsp 的文件。如果您考虑到所有这些,您的方法可能如下所示:

    @GET
    @Produces(MediaType.TEXT_HTML)
    public Viewable getMobileReport() {
        return new Viewable("/test", service.getMobileReport(id));
    }
    

    【讨论】:

    • @mounish:你的意思是你的对象没有被翻译成 JSON?有一些库可以为您执行此操作,因此您不必手动执行此操作。
    • 在我的服务响应中像上面那样作为 json 对象出现,但在客户端我没有在我的骨干模型中找到它。在我的浏览器控制台中,jsp 作为响应。
    • 我做了一些更新,但听起来你的问题是客户端,而不是服务器端。
    猜你喜欢
    • 2011-10-14
    • 2015-01-05
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多