[英]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.