2017-03-09 65 views
1

我試圖創建一個函數withCheckPermissions,檢查用戶是否有權限,的Java 8:功能界面,檢查權限和返回響應

  1. 如果用戶沒有permission'd返回一個「壞響應「
  2. 否則返回一個‘成功’,如果它是一個POST
  3. 否則返回一個GET請求

下面的內容是我到目前爲止有:

public <A extends Response> Response withCheckPermissions(Supplier<A> code) { 
    User user = getCurrentUser(); 
    if (isAllowed(user)) { 
     try { 
     return code.get(); 
     } catch (Exception e) { 
     return handleError(ERROR_MESSAGE, e); 
     } 
    } else { 
     log.warn("User not allowed..."); 
     return sendBadRequest(NO_ACCESS_MESSAGE); 
    } 
    } 

我叫它爲:

@POST 
    @Path("myJob") 
    public Response sendMail() { 
     return withCheckPermissions(() -> { 
     try { 
      manager.generateEmail(); 
     } catch (Exception e) { 
      return handleError("Problem sending email", e); 
     } 
     return sendSuccess(); 
     }); 
    } 

我得到的錯誤,如:

Could not find MessageBodyWriter for response object of type: java.util.HashMap of media type: application/octet-stream 

是否有做一個適當的方式?

我試圖避免結構如:

if isAllowed(User) { 
    doSomething() 
} else { 
return errorResponse 
} 
+1

看起來不錯。我不明白爲什麼錯誤會有關係。 – shmosel

+3

您收到的錯誤與您檢查權限的方式無關。 –

+1

你的方法可能應該返回'A'而不是'Response'。否則,參數是不必要的。 – shmosel

回答

2

當你沒有定義您的端點產生的媒體類型,該類型將是「應用程序/八位字節流」,除非你告訴它請求頭(Accept =「text/plain」)。

將@Produces(MediaType.TEXT_PLAIN)添加到您的方法中,並嘗試運行。