2012-02-18 26 views
6

Tôi có dịch vụ MVC REST mùa xuân được cho là nhận nội dung hỗn hợp. Bộ điều khiển được định nghĩa làRestEasy - UnsupportedMediaTypeException: Không thể tiêu thụ loại nội dung

@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"; 
    } 

Khi tôi kiểm tra trên tôi nhận được lỗi sau:

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] 

Nếu tôi thay đổi chú thích @Consumes để nó sử dụng @Consumes("multipart/form-data") thay vì @Consumes("multipart/mixed") sau đó nó hoạt động. Tôi cần làm gì để làm việc với multipart/mixed?

Đây là cách tôi đang sử dụng ứng dụng khách để gửi nội dung đến dịch vụ 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); 

Tôi đã đấu tranh với điều này trong một thời gian để mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn

+1

Bạn có nhận ra rằng khách hàng của bạn là * thực sự * gửi yêu cầu 'multipart/form-data'? Vấn đề là ở phía khách hàng. – BalusC

+1

@BalusC - Thats thật thú vị. Làm thế nào để bạn biết nó là gì và làm thế nào để tôi gửi một yêu cầu đa/hỗn hợp? – ziggy

+0

Cũng lưu ý rằng bạn không thể tải lên nội dung tệp bằng 'multipart/mixed'. – Perception

Trả lời

0

Cố gắng sử dụng javax.ws.rs.core.MediaType thay vì đưa vào chuỗi. Nó tránh các lỗi chính tả có thể

1

Bạn đã kiểm tra loại nội dung của yêu cầu chưa? Tôi tin rằng khách hàng của bạn gửi nội dung đến dịch vụ REST đang đăng yêu cầu multipart/form-data.

Để hiểu làm thế nào để gửi một multipart/mixed request, bạn nên nhìn vào tài liệu của multipart kiểu nội dung tại http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html, phần 7.2.1 cho thấy boundary nên được chỉ định và sử dụng.

Về cơ bản, bạn cần phải làm theo điểm dưới đây để thực hiện yêu cầu multipart/mixed.

Bao gồm ranh giới trong tiêu đề

Content-Type: multipart/mixed;boundary=gc0p4Jq0M2Yt08jU534c0p 

Mỗi phòng trong số một phần trong yêu cầu nên có --boundary

--gc0p4Jq0M2Yt08jU534c0p 

phần cuối nên bao gồm --boundary--

--gc0p4Jq0M2Yt08jU534c0p-- 
Các vấn đề liên quan