MessageBodyProviderNotFoundException,ModelValidationException
来源:互联网 发布:网站编程常见单词 编辑:程序博客网 时间:2024/09/21 08:18
在使用dropwizard开发文件上传服务的时候,需要使用Jersy的扩展包:
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>${multipart.version}</version> </dependency>
在Resource中使用@FormDataParam
@Consumes(MediaType.MULTIPART_FORM_DATA) @POST public Response upload( @FormDataParam("name") String name, @FormDataParam("file") InputStream inputStream )
在Application中注册Multipart的Provider:
@Override public void run(final FileConfiguration configuration, final Environment environment) { environment.jersey().register(MultiPartFeature.class); environment.jersey().register(new MyResource()); }
否则会报异常:
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 javax.ws.rs.core.Response me.ligen.file.resources.FileResource.upload(java.lang.String,java.io.InputStream) throws java.lang.Exception at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[multipart/form-data], producedTypes=[], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS,
接下来要说的是重点,有单元测试习惯的同学,一定会使用Dropwizard提供的ResourceTestRule,那么极有会碰到这个异常:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=multipart/form-data, type=class org.glassfish.jersey.media.multipart.FormDataMultiPart, genericType=class org.glassfish.jersey.media.multipart.FormDataMultiPart
原因是客户端也需要注册MultiPartFeature,否则无法找到对应的Provider。解决办法如下:
@ClassRule public static final ResourceTestRule RESOURCE_TEST_RULE = ResourceTestRule.builder() .setClientConfigurator(clientConfig -> clientConfig.register(MultiPartFeature.class)) .addProvider(MultiPartFeature.class) .addResource(new MyResource()) .build();
这样就能美美得UT了。
阅读全文
0 0
- MessageBodyProviderNotFoundException,ModelValidationException
- Tips of UnityShader
- Discuz!X3 修改在线人数在线会员以及统计数据的方法
- 设计模式
- Distribute Candies
- linux 命令
- MessageBodyProviderNotFoundException,ModelValidationException
- Tabl栏效果的实现
- Beginning Spring学习笔记——第7章 使用Spring进行测试驱动开发
- 安装jdk后出现bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter
- mybatis与spring的整合
- CodeForce 681C 模拟题
- Java正则表达式实例
- 线程安全的单例模式
- 2017微软中国社招C++研发岗面试经历(共5面)