是否可以像在服务器端所做的那样,向ResteasyClient(代理框架)注册DynamicFeature?
所以类似这样的东西:
final ResteasyClient client = new ResteasyClientBuilder().build();
client.register(new MyDynamicFeature());
其中MyDynamicFeature实现
@POST
@Path("some/path/user")
@ExpectedHttpStatus(201) // <- this would have to be passed on somehow as expectedStatus
User createUser(User request);
@Override
public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
if (responseContext.getStatus() != expectedStatus) {
// explode
}
}
下面的一些文章似乎解释了一些非常相似的事情,但这似乎不适用于ClientResponseFilter/ResteAsyClient:
首先,我真的不能把解决方案归功于我,但我要把答案粘贴在这里。
你也可以问我们为什么要这么做?因为我们需要/希望测试服务返回正确的http状态,但不幸的是,我们测试的服务并不总是为相同的http方法返回相同的http状态。
例如。在下面的示例中,post返回HttpStatus.OK,同一服务的另一个post方法可以返回HttpStatus.Created。
import java.io.IOException;
import java.util.UUID;
import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientResponseContext;
import javax.ws.rs.client.ClientResponseFilter;
/**
* {@link ClientResponseFilter} which will handle setting the HTTP StatusCode property for use with
* {@link HttpStatusResponseInterceptor}
*/
public class HttpStatusResponseFilter implements ClientResponseFilter {
public static final String STATUS_CODE = "StatusCode-" + UUID.randomUUID();
@Override
public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
requestContext.setProperty(STATUS_CODE, responseContext.getStatusInfo());
}
}
import java.io.IOException;
import java.lang.annotation.Annotation;
import javax.ws.rs.ServerErrorException;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.ReaderInterceptorContext;
/**
* {@link ReaderInterceptor} which will verify the success HTTP status code returned from the server against the
* expected successful HTTP status code {@link SuccessStatus}
*
* @see HttpStatusResponseFilter
*/
public class HttpStatusResponseInterceptor implements ReaderInterceptor {
@Override
public Object aroundReadFrom(ReaderInterceptorContext interceptorContext) throws ServerErrorException, IOException {
Status actualStatus = (Status) interceptorContext.getProperty(HttpStatusResponseFilter.STATUS_CODE);
if (actualStatus == null) {
throw new IllegalStateException("Property " + HttpStatusResponseFilter.STATUS_CODE + " does not exist!");
}
Status expectedStatus = null;
for (Annotation annotation : interceptorContext.getAnnotations()) {
if (annotation.annotationType() == SuccessStatus.class) {
expectedStatus = ((SuccessStatus) annotation).value();
break;
}
}
if (expectedStatus != null && expectedStatus != actualStatus) {
throw new ServerErrorException(String.format("Invalid status code returned. Expected %d, but got %d.",
expectedStatus.getStatusCode(), actualStatus.getStatusCode()), actualStatus);
}
return interceptorContext.proceed();
}
}
final ResteasyClient client = new ResteasyClientBuilder().disableTrustManager().build();
client.register(new HttpStatusResponseFilter());
client.register(new HttpStatusResponseInterceptor());
@POST
@Path("some/foobar")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@SuccessStatus(Status.OK)
Foobar createFoobar(Foobar foobar);
EasySwoole支持用户自定义error handler 创建错误处理器 实现ErrorHandlerInterface接口 namespace App; use CoreAbstractInterfaceErrorHandlerInterface; class Test implements ErrorHandlerInterface { function handler( $msg
我能够在eclipse中远程调试apache nifi自定义处理器(参考:1、2、3)。我遵循的步骤如下: > 取消apache nifi bootstrap.conf中行下的注释 启动apache nifi
这是我的代码(简单但有效),它是一个计算引擎,通过按特定顺序应用规则进行试验: 我想用自定义注释对此进行编码,因为我的目标是统计哪些引擎调用哪些规则,我认为这会更容易: 然后我可以用org扫描。springframework。上下文注释。ClassPathScanningCandidateCom使统计更容易。 这可能吗(怎么可能?)?这是好办法吗?我还有别的办法吗?
本文向大家介绍laravel框架 api自定义全局异常处理方法,包括了laravel框架 api自定义全局异常处理方法的使用技巧和注意事项,需要的朋友参考一下 api返回实现 api返回信息 1,添加异常类 2,修改laravel异常类u。。。 考虑开发配置时 以上这篇laravel框架 api自定义全局异常处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我有一些需要经常打印的结构。现在,我正在围绕该结构使用经典的打印包装器: 此功能很方便,但实际上也很有限。如果不进行新包装,则无法添加或添加一些文本。我知道我可以使用 va_arg 系列添加或添加一些文本,但是我觉得我会重新实现。 我想知道是否有可能向printf编写自定义函数。我希望能够写这样的东西: 这可能吗 ?我怎样才能做到这一点 ? 注意:我在Ubuntu Linux 10.0
本文向大家介绍Django框架自定义session处理操作示例,包括了Django框架自定义session处理操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django框架自定义session处理操作。分享给大家供大家参考,具体如下: django有自己的一套session框架,有他自己的机制处理,但这通常是在全新构件系统的时候才会用到。如果是一套已有的系统,现在重新想用djan