Java 8 : Functional interface to check permissions and return a response

标签 java java-8 functional-interface

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

  1. 如果用户未获得许可,则会返回“错误响应”
  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 
}

最佳答案

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

将 @Produces(MediaType.TEXT_PLAIN) 放入您的方法中并尝试,应该可以工作。

关于Java 8 : Functional interface to check permissions and return a response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42707404/

相关文章:

java - 在java中处理大文件

java - 使用 Java 8 流减小列表的大小

java-8 - 在 Java8 中对 else 条件使用相同的流

lambda - 如何在 Java 功能接口(interface)中使用 andThen 或类似方法包装函数

java - ArtifactSet 的 Pom.xml 错误

java - Jackson JSON - 反序列化时从日历对象中剥离时区

Java私有(private)静态内部类

Java 8 在接口(interface)默认方法中使用枚举值

lambda - 为什么 Java Lambda 类型推断仅处理具有唯一参数的方法?

java - 为什么 this.getClass 给它自己的类名而不是匿名类名?