2015-07-09 22 views
0

我試圖做一個REST調用我的春天控制器上的JBoss

@RequestMapping(value = "/myMethod", method = RequestMethod.POST) 
public 
@ResponseBody 
String myMethod(@RequestBody MyClass myClass) { 
    String json = null; 
    String METHOD_NAME = "getAuditForRecordId"; 

    Gson gson = new GsonBuilder().create(); 
    try { 
     json = gson.toJson("success"); 
    } 

    return json; 
} 

我的角度支柱呼叫

$http.post(<URL to myMethod>, postData, 
      { 
       headers: { 
        'Accept': 'application/json', 
        'Content-Type': 'application/json' 
       } 
      }).success(function() { 
       d.resolve(response); 
      }).error(function() { 
       d.reject(); 
      } 
     ); 

是遇到400錯誤的請求錯誤。我有一個CORSFilter我的JBoss應用程序

@Override 
public void doFilter(ServletRequest req, ServletResponse resp, 
        FilterChain chain) throws IOException, ServletException { 
    HttpServletResponse response=(HttpServletResponse) resp; 

    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    response.setHeader("Access-Control-Allow-Headers", "Accept, Content-Type"); 

    chain.doFilter(req, resp); 
} 

GET方法在同一個控制器內工作正常。但是這個POST失敗了。

我的POST JSON對象具有嵌套的對象。

我也嘗試過從Chrome的REST客戶端進行相同的POST調用,但仍然得到相同的錯誤。有人能指出我在這裏犯的明顯錯誤嗎?

回答

0

我發現這個問題。這是我通過我的發佈請求傳遞的數據。我在傳入的嵌套對象中有一個額外的屬性。當我在服務器端更改數據模型以包含該額外屬性時,我的問題已解決。

0

錯誤在於帖子上的網址是在其他域中分配的,而不是在您的項目運行的同一個域中,因此您不會調用url形式的其他域。

這是我的例子:

@RequestMapping(value = "/listAll.json", params = {"page","pageSize","order","filter"}, method = RequestMethod.GET, produces={"application/json; charset=ISO-8859-1"}) 
@ResponseBody 
public String listAll(@RequestParam("pageSize") int pageSize, @RequestParam("page") int page, @RequestParam("order") String order, @RequestParam("filter") String filters){ 
    return this.pilmotiformService.listAllIntermediario(pageSize, page, order, filters);   
} 

@RequestMapping(value = "updateRecord.json", method = RequestMethod.POST, produces={"application/json; charset=ISO-8859-1"}) 
@ResponseBody 
public String UpdateRecord(@RequestParam("cons") Long cons) throws Throwable{} 

從角:

myApp.service('myService', function($http, $rootScope, $routeParams) {   

this.oneFunction = function() {      
    return $http({ 
     method: 'GET', 
     url: WEB_SERVER+'/oneMethod.json', 
     params: {modulo: 'FMT_FORMREGI,FMT_AUDITORIA,FMT_ESTADO,FMT_ADJUNTO,PIL_USUA,PIL_MOTIVO,PIL_MOTIFORM' } 
    }); 
} 

this.otherFunction = function(one, two, three) {   

    data = {one : one, two : two, three : three}; 

    return $http({ 
     method: 'POST', 
     url: WEB_SERVER+'/otherMethod.json', 
     data: data 
    }); 
}   

});

+0

GETs在同一個控制器工作正常。只有POST失敗。我相信這與我發佈的數據有關。你是這麼認爲的嗎? – yalkris

+0

在你的控制器的春天MVC你把生產= {「application/json」}?看到我的例子完整,適用於我,我每天都使用,也許你不包括傑克遜馬普賓。你是? – HeduGogo

0

Jackson映射器是將數據轉換或序列化爲實體的組件。

<dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-core-lgpl</artifactId> 
      <version>1.9.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jackson</groupId> 
      <artifactId>jackson-mapper-lgpl</artifactId> 
      <version>1.9.13</version> 
     </dependency> 
0

我不知道,但我知道你在這裏失蹤的是那JSON是這種格式

{"key" : "value"} 

和你正在嘗試做的"success"所以可能這是你錯過了什麼。

因爲我還沒有上GSON工作,我可能是錯的或JSON很多