restful call MediaType的MediaType格式错误:“*; Q = 0.2”

尝试使用POST方法执行restful Web服务。 这是我的界面的相关部分:

@Path("/customers") public interface CustomerResource { @POST @Consumes(MediaType.APPLICATION_XML) public Response createCustomer(InputStream is); ..... } 

实施:

  // Create customer public Response createCustomer(InputStream is) { logger.debug("In createCustomer"); Customer customer = readCustomer(is); customer.setId(idCounter.incrementAndGet()); customerDB.put(customer.getId(), customer); logger.debug("Created customer " + customer.getId()); logger.debug("Out createCustomer"); return Response.created(URI.create("/customers/" + customer.getId())).build(); } 

客户打电话(相关部分)

  URL postUrl = new URL("http://localhost:8080/ShoppingApplication/rest/customers"); HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection(); connection.setDoOutput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "application/xml"); OutputStream os = connection.getOutputStream(); os.write(newCustomer.getBytes()); os.flush(); 

这是我的web.xml:

    My Shop  MyShopping org.apache.wink.server.internal.servlet.RestServlet  javax.ws.rs.Application com.restfully.shop.services.ShoppingApplication  1   MyShopping /rest/*   

当我打电话时,所有我回来的都是巨大的exception女巫实际上说:INFO:WebApplicationException(404 – Not Found)在org.apache.wink.server.internal处理器链调用javax.ws.rs.WebApplicationException期间发生。位于org.apache.wink.server.handle(RequestHandlersChain.java:26)org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain。)的handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:60)。 java:22)atg.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:47)at org位于org.apache.wink.server.handlers的org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)的.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) org.apach的.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55) 位于org.apache.wink.server的org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)的e.wink.server.internal.handlers.OptionsMethodHandler.handleRequest(OptionsMethodHandler.java:42)。 handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)atg.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest( SearchResultHandler.java:33)org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)at org位于org.apache.wink.server.internal的org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:43)的.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55) org.apache.wink.server.in中的.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:136) ternal.RequestProcessor.handleRequest(RequestProcessor.java:117)位于org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:102)的javax.servlet.http.HttpServlet.service(HttpServlet.java: 722)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)atg.apache.catalina.core.StandardWrapperValve .invoke(StandardWrapperValve.java:240)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)at org。位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)的apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve。 java:118)在org.apache.c的org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) oyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process(Http11AprProtocol.java:357)at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor。 run(AprEndpoint.java:1671)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)at java.lang.Thread.run(Unknown来源)2011年1月12日上午9:47:35 org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate fromString SEVERE:MediaType的MediaType格式错误:“ ; q = .2“2011年1月12日上午9:47:35 org.apache.wink.server.internal.RequestProcessor handleRequest SEVERE:未处理的exceptionjava.lang.IllegalArgumentException:MediaType的MediaType格式错误:” ; q = .2“at org.apache.wink.com.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:67)org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate .java:32)在org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString(AcceptHeaderDelegate.java:47)的javax.ws.rs.core.MediaType.valueOf(MediaType.java:119) Org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString(AcceptHeaderDelegate.java:32)org.apache.wink.common.internal.http.Accept.valueOf(Accept.java:139)at org。位于org.apache.wink的org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptableMediaTypes(HttpHeadersImpl.java:84)中的apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptHeader(HttpHeadersImpl.java:115)。 org.apache.wink.server.handlers.AbstractHandler中的server.internal.handlers.PopulateResponseMediaTypeHandler.handleResponse(PopulateResponseMediaTypeHandler.java:82)。 handleResponse(AbstractHandler.java:38)org.apache.wink.server.handler.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)位于org.apache.wink.server的org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39) .handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)org.apache.wink.server.handler.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain) .java:55)org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)at org。 org.apache.wi上的apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22) nk.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)位于org.apache.wink.server.internal.RequestProcessor的org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:43)。 handleRequestWithoutFaultBarrier(RequestProcessor.java:145)org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:117)org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java: 102)位于org.apache.catalina.core.ApplicationFilterChain.doFilter的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)的javax.servlet.http.HttpServlet.service(HttpServlet.java:722) (ApplicationFilterChain.java:208)位于org.apache的org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)。 org.apache.catalina.va上的catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)的lves.ErrorReportValve.invoke(ErrorReportValve.java:108)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)at org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler .process(Http11AprProtocol.java:357)atg.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:1671)at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(Unknown Source)at java java.lang.Thread.run中的.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)(未知来源)引起:java.lang.ArrayIndexOutOfBoundsException:1 org.apache.wink.common.internal.providers.header .MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:54)… 40更多

正如我在您的客户端代码中看到的那样,您注释掉了内容类型。
为什么? 你发送什么内容类型?
无论如何,正确的媒体类型应该是*/*;q=0.2

顺便问一下,你用的是什么版本的Wink? 我认为最新版本更容易被媒体类型错误所忽视。

这个错误是由jar文件冲突引起的。我删除了jetty.jar,jetty-util.jar并删除了jsr305.jar,REST API工作正常。 希望这可以帮到你。