java – RestEasy – UnsupportedMediaTypeException:无法使用内容类型

我有一个Spring MVC REST服务,应该接收混合的mime内容.控制器定义为

    @POST
    @Path("/createMime")
    @Consumes("multipart/mixed")
    @ResponseStatus(HttpStatus.OK)
    public String createMime(@Context ServletContext servletContext,MultipartInput input) throws MyRestException {

        logger.info("Processing /createMime");

        return "TEST";
    }

当我测试上面我得到以下错误

17:18:58,456 WARN  [org.jboss.resteasy.core.Synchronousdispatcher] (http--127.0.0.1-8080-1) Failed executing POST services/createMime: org.jboss.resteasy.spi.UnsupportedMediaTypeException: Cannot consume content type
        at org.jboss.resteasy.core.registry.Segment.match(Segment.java:112) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:33) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:44) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:374) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:367) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:251) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.Synchronousdispatcher.getInvoker(Synchronousdispatcher.java:173) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.core.Synchronousdispatcher.invoke(Synchronousdispatcher.java:118) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerdispatcher.service(ServletContainerdispatcher.java:208) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletdispatcher.service(HttpServletdispatcher.java:55) [resteasy-jaxrs-2.2.1.GA.jar:]
        at org.jboss.resteasy.plugins.server.servlet.HttpServletdispatcher.service(HttpServletdispatcher.java:50) [resteasy-jaxrs-2.2.1.GA.jar:]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:139) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
        at org.jboss.as.web.NamingValve.invoke(NamingValve.java:57) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final]
        at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:49) [jboss-as-jpa-7.0.2.Final.jar:7.0.2.Final]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:154) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:667) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:952) [jbossweb-7.0.1.Final.jar:7.0.2.Final]
        at java.lang.Thread.run(Thread.java:619) [:1.6.0_07]

如果我更改@Consumes注释以便它使用@Consumes(“multipart / form-data”)而不是@Consumes(“multipart / mixed”),那么它可以工作.我需要做什么才能让它与multipart / mixed一起使用?

以下是我使用客户端将内容发送到REST服务的方式.

HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://localhost:8080/MyRestService/rest/services/createMime");

        Scanner scanner = 
           new Scanner(new File("header.xml")).useDelimiter("\\Z");
           String messageHeader = scanner.next();
           scanner.close(); 

        FileBody bin = new FileBody(new File("myImage.jpg"));
        StringBody header = new StringBody(messageHeader.toString());

        multipartentity reqEntity = new multipartentity();
        reqEntity.addPart("header",header);
        reqEntity.addPart("payload",bin);
        httppost.setEntity(reqEntity);

        HttpResponse response = httpclient.execute(httppost);

我一直在努力解决这个问题,所以任何帮助都将不胜感激.

谢谢

最佳答案
您是否检查了请求的内容类型?我相信您将客户端发送到REST服务的客户端是发布multipart / form-data请求.

要了解如何发送多部分/混合请求,您应该在http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html查看多部分内容类型的文档,第7.2.1节建议应该指定和使用边界.

基本上,您需要按照以下要点进行多部分/混合请求.

标题中包含边界

Content-Type: multipart/mixed;boundary=gc0p4Jq0M2Yt08jU534c0p

请求中的每个部分都应该有–boundary

 --gc0p4Jq0M2Yt08jU534c0p

最后一部分应包括 – 边界 –

--gc0p4Jq0M2Yt08jU534c0p--

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...