在使用不同的验证器调用不同的rpc方法之前,我需要验证请求。
所以我实现了如下验证器
class BarRequestValidator {
public FooServiceError validate(BarRequest request) {
if (request.bar.length > 12) {
return FooServiceError.BAR_TOO_LONG;
} else {
return null;
}
}
}
并在我的rpc方法之前添加自定义注释
class FooService extends FooServiceGrpc.FooServiceImplBase {
@Validated(validator = BarRequestValidator.class)
public void bar(BarRequest request, StreamObserver<BarResponse> responseObserver) {
// Validator should be executed before this line, and returns error once validation fails.
assert(request.bar <= 12);
}
}
但是我发现我在gRPC ServerInterceptor中找不到获取注释信息的方法。有没有办法像这样实现grpc请求验证?
您可以在没有注释的情况下完成此操作,只需使用普通的ServerInterceptor:
Server s = ServerBuilder.forPort(...)
.addService(ServerInterceptors.intercept(myService, myValidator))
...
private final class MyValidator implements ServerInterceptor {
ServerCall.Listener interceptCall(call, headers, next) {
ServerCall.Listener listener = next.startCall(call, headers);
if (call.getMethodDescriptor().getFullMethodName().equals("service/method")) {
listener = new SimpleForwardingServerCallListener(listener) {
@Override
void onMessage(request) {
validate(request);
}
}
}
return listener;
}
}
请注意,我在这里跳过了大部分样板。当一个请求进来时,拦截器首先获取它并检查它是否符合它所期望的方法。如果是这样,它会进行额外的验证。在生成的代码中,您可以引用现有的Method odDescriptor
s,而不是像上面那样复制名称。
我有适当的基于ORM的post和tags表。在数据透视表上分配给post的标记。发帖- 这是我的数据库: 我想检索所有有特殊标签名称的帖子。
我有一个问题,在我看来挺简单的,但到目前为止还不可能找到一个简单的解决方案:在我的网站上,每当Android软键盘弹出时,它就会调整窗口大小,缩小内容,而不是仅仅覆盖页面。 前两个是现状,第三个是我想要的。在iOS上是这样工作的。我该怎么做才能让它正常工作呢? 我试着设定身体的大小和位置,但到目前为止,没有运气。我已经看到了一些非常复杂的JS代码片段来解决类似的问题,但是我没有让它们按照我想要的方
如何获取已设置为ImageView的可绘图文件的名称?
我最近开始使用在我的android应用程序上播放流链接,比如和文件,但当我试图播放文件,以下消息开始出现在Android logcat中: 源错误。com.google.android.exoplayer2.source.无法识别的输入格式异常:输入不以#EXTM3U头开始。在com.google.android.exoplayer2.source.hls.playlist.HlsPlaylist
我使用Selenium,需要无休止地等待页面加载(因为加载需要几个小时),然后解析其中的数据。我该怎么做? 我使用这样的一些代码:
当我使用jsole访问weblogic的mbean时,我只能得到一些关于jvm的信息,比如“java.lang”。但是我想得到的是关于“jdbc”、“jta”、“ejb”、“servlet”... 我想知道是否可以通过服务获得这些指标:jmx:rmi:///jndi/rmi://10.0.99.102:7997/jmxrmi使用用户名和密码。我认为我的配置很可能有错误,但我不知道问题出在哪里。 然