2016-08-05 15 views
1

我有春天RESTful Web服務,這是工作的罰款與郵差(在Chrome插件)與URL(http://localhost:8080/Assignment/rest/words/ {名} /保護)需要命名爲「名」java.lang.IllegalArgumentException異常:無效的URI「/轉讓/ REST /字/ {名} /保護」:逃脫絕對路徑無效

1個參數和我的HttpClient用Java編寫過。用下面的代碼。

HttpClient client = new HttpClient(); 

PostMethod method = new PostMethod("http://localhost:8080/Assignment/rest/words/{name}/protection"); 
method.setParameter("name", "value"); 

    byte[] responseBody = null; 
    int statusCode = 0; 
    try { 
     // Executing method. 
     statusCode = client.executeMethod(method); 
     }catch(Exception e){} 
     // checking status code 
     if (statusCode != HttpStatus.SC_OK) { 
      System.err.println("Method failed: " + method.getStatusLine()); 
     } 

     // Reading response body. 
     responseBody = method.getResponseBody(); 
statusCode = client.executeMethod(method);其顯示錯誤

如下

java.lang.IllegalArgumentException: Invalid uri 'http://localhost:8080/Assignment/rest/words/{name}/protection': escaped absolute path not valid org.apache.commons.httpclient.HttpMethodBase.<init>(HttpMethodBase.java:222) org.apache.commons.httpclient.methods.ExpectContinueMethod.<init>(ExpectContinueMethod.java:93)  org.apache.commons.httpclient.methods.EntityEnclosingMethod.<init>(EntityEnclosingMethod.java:119) org.apache.commons.httpclient.methods.PostMethod.<init>(PostMethod.java:106) com.aspose.talib.service.WordService.getDataFromURL(WordService.java:50) com.aspose.talib.service.WordService.postRequestForProtectData(WordService.java:37)  com.aspose.talib.web.WordController.init(WordController.java:21) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) javax.el.BeanELResolver.invoke(BeanELResolver.java:183)  javax.el.CompositeELResolver.invoke(CompositeELResolver.java:161) org.apache.el.parser.AstValue.getValue(AstValue.java:173) org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) javax.faces.component.UIOutput.getValue(UIOutput.java:174) com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)  com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164) javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458)  com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

請幫

+0

看起來像'PostMethod.setParameter()'和'PostMethod.toString()'不能像你期望的那樣工作。即該參數未設置。你能告訴我這個班的完全合格的名字嗎? –

回答

1

很明顯,像大括號字符不會在URI允許的。您必須對該部分進行編碼。

嘗試這樣:

PostMethod method = new PostMethod(URIUtil.encodePath("http://localhost:8080/Assignment/rest/words/{name}/protection", "UTF-8")); 
method.setParameter("name", "value"); 

URIUtilcommons-httpclient-3.1

<dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <version>3.1</version> 
    </dependency> 
+0

我使用URIBuilder用於編碼和它給400錯誤的請求,你太棒了 – TalibGill

0

其更好的使用URLBuilder第一然後分配內置的URL構造器參數:

URIBuilder uriBuilder =新URIBuilder ();

+0

它顯示java.net.URISyntaxException:在索引44非法字符在路徑:http://本地主機:8080 /分配/休息/字/ {名稱} /保護 – TalibGill