我正在尝试创建一个函数withCheckPermissions
来检查用户是否拥有权限,
- 如果用户未获得许可,则会返回“错误响应”
- 否则,如果是 POST,则返回“成功”
- 否则返回 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/