Java 8:用于检查权限和返回响应的功能接口

时间:2017-03-09 23:20:46

标签: java java-8 functional-interface

我正在尝试创建一个函数withCheckPermissions,用于检查用户是否具有权限,

  1. 如果用户未获得许可,则返回“错误回复”
  2. 否则如果是POST则返回“成功”
  3. 否则返回GET请求的内容
  4. 这是我到目前为止所拥有的:

      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 个答案:

答案 0 :(得分:2)

由于您没有定义端点生成的媒体类型,因此类型将为“application / octet-stream”,除非您在请求标头上通知它(Accept =“text / plain”)。

将@Produces(MediaType.TEXT_PLAIN)添加到您的方法并尝试,应该可以。