2015-07-09 51 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很多