第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JAX-RS —如何一起返回JSON和HTTP狀態(tài)代碼?

JAX-RS —如何一起返回JSON和HTTP狀態(tài)代碼?

蝴蝶不菲 2019-10-14 09:47:09
我正在編寫REST Web應用程序(NetBeans 6.9,JAX-RS,TopLink Essentials),并嘗試返回JSON 和 HTTP狀態(tài)代碼。我已經(jīng)準備好工作的代碼,當從客戶端調(diào)用HTTP GET方法時,該代碼返回JSON。實質(zhì)上:@Path("get/id")@GET@Produces("application/json")public M_機械 getMachineToUpdate(@PathParam("id") String id) {    // some code to return JSON ...    return myJson;}但是,我也想用JSON數(shù)據(jù)一起返回的HTTP狀態(tài)代碼(500,200,204,等)。我嘗試使用HttpServletResponse:response.sendError("error message", 500);但是,這使瀏覽器認為它是“真實的” 500,因此輸出網(wǎng)頁是常規(guī)的HTTP 500錯誤頁面。我想返回一個HTTP狀態(tài)代碼,以便我的客戶端JavaScript可以處理一些依賴于它的邏輯(例如,在HTML頁面上顯示錯誤代碼和消息)。這是可能的還是不應該將HTTP狀態(tài)代碼用于這種情況?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經(jīng)驗 獲得超3個贊

憑空回答可以解決問題,但是它修改了整個方法,讓諸如Jackson + JAXB之類的提供程序自動將您返回的對象轉換為某種輸出格式(如JSON)。受Apache CXF 帖子(使用特定于CXF的類)的啟發(fā),我發(fā)現(xiàn)了一種設置應在任何JAX-RS實現(xiàn)中都可以使用的響應代碼的方法:注入HttpServletResponse上下文并手動設置響應代碼。例如,以下是CREATED在適當時將響應代碼設置為的方法。


@Path("/foos/{fooId}")

@PUT

@Consumes("application/json")

@Produces("application/json")

public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo, @Context final HttpServletResponse response)

{

  //TODO store foo in persistent storage

  if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic

  {

    response.setStatus(Response.Status.CREATED.getStatusCode());

  }

  return foo;  //TODO get latest foo from storage if needed

}

改進:找到另一個相關答案后,我了解到HttpServletResponse即使對于單例服務類(至少在RESTEasy中),也可以將其作為成員變量注入?。∨c用實現(xiàn)細節(jié)污染API相比,這是一種更好的方法。它看起來像這樣:


@Context  //injected response proxy supporting multiple threads

private HttpServletResponse response;


@Path("/foos/{fooId}")

@PUT

@Consumes("application/json")

@Produces("application/json")

public Foo setFoo(@PathParam("fooID") final String fooID, final Foo foo)

{

  //TODO store foo in persistent storage

  if(itemDidNotExistBefore) //return 201 only if new object; TODO app-specific logic

  {

    response.setStatus(Response.Status.CREATED.getStatusCode());

  }

  return foo;  //TODO get latest foo from storage if needed

}


查看完整回答
反對 回復 2019-10-14
  • 3 回答
  • 0 關注
  • 796 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號