java - 如何使用 Multipart 特性进行资源测试

标签 java jersey multipartform-data dropwizard multipart

我创建了我的资源来处理一些图像,我想像以前一样用 JUnit 的 @ClassRule 测试它们。它们看起来像这样:

@Path("/myImage")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response postImage(
       @FormDataParam("file") InputStream inputStream) {
//doStuff
}

现在,我想测试它,但遇到了问题。我争取这个类(class)规则没问题

@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
                .addResource(new MyResource())
                .addResource(new MultiPartBundle())
                .build();

但是还是报错

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.

[[FATAL] No injection source found for a parameter of type public ...

如何针对这个问题编写合适的类规则?

最佳答案

错误是因为您没有向服务器注册MutliPartFeatureMultiPartBundle(它注册了 MultiPartFeature)不受 ResourceTestRule 支持。所以你只需要自己注册就可以了

public static final ResourceTestRule resources = ResourceTestRule.builder()
                .addResource(new MyResource())
                .addProvider(MultiPartFeature.class) 
                .build();

与客户端相同。如果您想在客户端使用多部分序列化,您还需要注册该功能

resource.client().register(MultiPartFeature.class)..

你可以看到一个完整的例子here

关于java - 如何使用 Multipart 特性进行资源测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37263316/

相关文章:

java - 通用类的 MessageBodyReader/Writer

curl - 使用 GoLang 通过curl 发送多部分请求

ios - 这个 PNG 文件有什么特别之处?

ios - NSURLSession 多部分/表单数据发布请求出现问题

java - 方法与 ? extends Collections<String> 不适用于 Set<String>

java - 重新排序滚动 Pane 中的面板

android - Jersey REST 服务器安全和安卓客户端安全

java - Jersey 2 日志记录和 gzip

java - 尝试了解封装示例问题

Java Selenium : Switch to iframe inside shadow-root open inside webview