restful webService 方法跳轉錯誤的解決方案

最近在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

相關文章
相關標籤/搜索