Java8:检查权限和return响应的功能接口
Java 8: Functional interface to check permissions and return a response
我正在尝试创建一个函数 withCheckPermissions
检查用户是否有权限,
- 如果用户没有权限return a "Bad Response"
- 否则 Return "success" 如果它是 POST
- 否则return 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(接受 = "text/plain")。
将@Produces(MediaType.TEXT_PLAIN) 放入您的方法中并尝试,应该有效。
我正在尝试创建一个函数 withCheckPermissions
检查用户是否有权限,
- 如果用户没有权限return a "Bad Response"
- 否则 Return "success" 如果它是 POST
- 否则return 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(接受 = "text/plain")。
将@Produces(MediaType.TEXT_PLAIN) 放入您的方法中并尝试,应该有效。