最近在call restful webService的時候遇到問題,並無跳轉到我想調用的方法裏面去。好比我明明call的是add()方法,結果它跳到了delete()方法裏面去。還有就是在同一次session裏面,我不管call什麼方法,它調用的都是同一個方法(並且我測試下來這個方法是隨機的-_-#).
java
主程序是這樣:web
try{ ClientRequestFactory crf = new ClientRequestFactory(); Test test = = crf.createProxy(InvokerService.class, url); restfulService.add();//call service方法 } catch(Exception e){ e.printStackTrace(); }
InvokerService裏是這樣:restful
@POST @Consumes() @Produces(MediaType.APPLICATION_JSON) public void add(); @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) public void delete();
restfulService裏面是這樣:session
@Inject Utils utils; @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) public void add() { try { utils.add(); } catch (Exception e) { e.printStackTrace(); } } @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) public void delete() { try { utils.delete(); } catch (Exception e) { e.printStackTrace(); } }
個人解決方案有兩個方面。第一,在兩個service裏面的方法上,都加上path這個annotation:測試
@POST @Consumes() @Produces(MediaType.APPLICATION_JSON) @Path("/add")//增長annotation public void add(); @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) @Path("/delete")//增長annotation public void delete(); @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) @Path("/add")//增長annotation public void add() { try { utils.add(); } catch (Exception e) { e.printStackTrace(); } } @POST @Consumes() @Produces(MediaType.APPLICATION_JSON) @Path("/delete")//增長annotation public void delete() { try { utils.delete(); } catch (Exception e) { e.printStackTrace(); } }
這樣在call service方法的時候它就不會亂跳了。url
第二,每次call完都關掉代理:代理
ClientRequestFactory crf = null; Test test = null; try{ crf = new ClientRequestFactory(); test = crf.createProxy(InvokerService.class, url); restfulService.add();//call service方法 } catch(Exception e){ e.printStackTrace(); } finally{ test = null;//關掉代理類 crf = null;//關掉工廠 }
供參考。
rest