@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(@RequestParam("file") MultipartFile file)
我的理解是我需要泽西-媒体-多部分依赖
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.25.1</version>
</dependency>
当我尝试发出post请求时,我得到一个415不受支持的媒体类型错误,我不确定为什么。它被设置为消耗MULTIPART_FORM_DATA,参数是一个multipartfile。
编辑我添加了如下配置,
@Configuration
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
register(MultiPartFeature.class);
}
}
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(
@FormDataParam("file") InputStream file,
@FormDataParam("file") FormDataContentDisposition fdcd,
@FormDataParam("file-detail") String fileDetail) throws IOException {
现在我得到了[[FATAL]没有为public javax.ws.rs.core.response类型的参数找到注入源
这里是我的Spring Boot类,它包含附加配置
@SpringBootApplication
@EnableCircuitBreaker
@EntityScan("com.whatever.")
@ImportResource({"classpath*:/META-INF/**/spring-bootstrap.xml"})
@Import({JerseyConfig.class})
@EnableJpaRepositories(basePackages="whatever", entityManagerFactoryRef="entityManagerFactory")
public class Application {
protected TomcatEmbeddedServletContainerFactory createTomcatEmbeddedServletContainerFactory() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {
((StandardHost) tomcat.getHost()).setErrorReportValveClass(StringUtils.EMPTY);
return super.getTomcatEmbeddedServletContainer(tomcat);
}
};
}
@Bean
public FilterRegistrationBean requestContextFilter() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new org.springframework.web.filter.RequestContextFilter());
filterRegistration.setName("RequestContextFilter");
filterRegistration.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
filterRegistration.addUrlPatterns(BASE_PATH + "*");
return filterRegistration;
}
@Bean
public FilterRegistrationBean springSecurityFilterChain() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new org.springframework.web.filter.DelegatingFilterProxy());
filterRegistration.setName("SpringSecurityFilterChain");
filterRegistration.setOrder(Ordered.HIGHEST_PRECEDENCE + 2);
filterRegistration.addUrlPatterns(BASE_PATH + "*");
return filterRegistration;
}
@Bean
@Conditional(NonWindowsCondition.class)
public FilterRegistrationBean f5Filter() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean(new F5Filter());
filterRegistration.setName("F5Filter");
filterRegistration.setOrder(Ordered.HIGHEST_PRECEDENCE + 3);
filterRegistration.addUrlPatterns(BASE_PATH + "*");
return filterRegistration;
}
/**
* Initializes and registers the JAX-RS filter implementation, currently Jersey.
*
* @return The JAX-RS filter registration.
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
@Bean
public FilterRegistrationBean jaxrsFilter() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Filter filter = (Filter) Class.forName("org.glassfish.jersey.servlet.ServletContainer").newInstance();
jerseyFilterRegistration.setFilter(filter);
jerseyFilterRegistration.setName("JerseyFilter");
jerseyFilterRegistration.setDispatcherTypes(EnumSet.allOf(DispatcherType.class));
// Set the Jersey filter mapping and context path
jerseyFilterRegistration.addUrlPatterns(BASE_PATH + "*");
jerseyFilterRegistration.addInitParameter("jersey.config.servlet.filter.contextPath", BASE_PATH);
// Load the common package and application package
jerseyFilterRegistration.addInitParameter("jersey.config.server.provider.packages", "com.whatever.jaxrs.feature;com.whatever.fig.risk.webservice.resource");
// Enable media type mappings on the URI such as .xml and .json
jerseyFilterRegistration.addInitParameter("jersey.config.server.mediaTypeMappings", "xml:application/xml, json:application/json");
// Enable Java bean validation integration
jerseyFilterRegistration.addInitParameter("jersey.config.beanValidation.enableOutputValidationErrorEntity.servers", "true");
// Disable the application.wadl from being generated and publicly visible (ITSO finding)
jerseyFilterRegistration.addInitParameter("jersey.config.server.wadl.disableWadl", "true");
// Forward 404s to Spring MVC, which serves up the Actuator endpoints and non-jersey resources
jerseyFilterRegistration.addInitParameter("jersey.config.servlet.filter.forwardOn404", "true");
if (isJerseyDebug) {
// Debug parameter switches
jerseyFilterRegistration.addInitParameter("jersey.config.server.monitoring.statistics.enabled", "true");
jerseyFilterRegistration.addInitParameter("jersey.config.server.tracing.type", "ALL");
jerseyFilterRegistration.addInitParameter("jersey.config.server.tracing.threshold", "VERBOSE");
}
return jerseyFilterRegistration;
}
@requestparam
和multipartfile
都是用于Spring而不是Jersey的。对于Jersey,您要使用的是注释@formdataparam
,对于参数,根据零件类型,您可以使用许多不同类型的参数。如果部件是文件,则可以使用inputstream
、file
或byte[]
参数;如果部件是纯文本,则可以使用String参数。如果需要文件名,可以在部件实体参数旁边添加FormDataContentDisposition
参数。下面是一个例子
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response upload(
@FormDataParam("file") InputStream file,
@FormDataParam("file") FormDataContentDisposition fdcd,
@FormDataParam("file-detail") String fileDetail) {
}
为此,您需要在应用程序中注册multipartfeature
。你可以看到这个帖子的方式你可以注册它。
另见:
我知道已经有一个类似的问题,但它没有解决上述错误。 这是我在API控制器中的PUT操作,在中运行良好: 以下是我的网页上的代码: HTML 打字稿 我的服务是: 我还使用了尝试上述问题的答案,我将我的文件附加到中,但不幸的是,同样的错误。如果媒体类型中没有任何设置,如何修复此问题?
我工作在一个。Net Core Web Api和Angular应用程序。我创建了一个控制器,它将图像链接到数据库中的一个项目: 它在Postman中运行良好,但当我想使用控制器时,我得到一个错误: Headers:HttpHeaders{normalizedNames:Map(0),lazyUpdate:null,Headers:Map(0)}消息:“的Http失败响应https://localh
问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道
我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。
我在使用Spring的reactive框架处理文件上传时遇到了一些问题。我想我正在跟踪文档,但无法摆脱/问题。 似乎Spring在将这些转换为时遇到了问题..?我卡住了--任何帮助都是可取的!
我试图用spring Boot1.2.0REST控制器和jQuery Ajax上传一个csv文件。当我发送post请求时,我不断得到415:不受支持的媒体类型错误。下面是我的表格: //代码 } 我在Spring Boot类中注释了MultipartConfigElement和MultipartResolver。我使用的是spring Boot1.2.0。当我用PostMan(chrome扩展)发