Angular JS $ http.post方法使JSON数组出错

时间:2013-09-11 12:21:54

标签: java json spring spring-mvc angularjs

您好。

我有一个奇怪的问题,我一整天都在苦苦挣扎。

我有我的Angular JS模块(App)和一个控制器。在那个控制器中,我注入了一个工厂,它处理我的$ http.post方法。 (我称之为“doSearch”)。到目前为止一切都很好。

在后端我有一个spring-mvc rest api类。它看起来像这样:

@Controller
@RequestMapping("/api/filesearch")
public class FileSearchAPI {

    @RequestMapping(value = "/search", method = RequestMethod.POST)
    @ResponseBody
    public ResultDTO doSearch(@RequestBody NewPerfectSearchDTO searchDTO) {
          System.out.println(searchDTO.getIdentifier());
          SolrService solrService = new SolrService();
          //return solrService.query(searchDTO);
          return new ResultDTO();
     }
}

这是发送一些JSON的函数,它将被映射到JAVA POJO / DTO:

doSearch: function(searchParams) {
        $http.post("/np/api/filesearch/search", JSON.stringify({identifier: "apa", inputRows: []})).success(function(response) {
            console.log(response);
            return response;
        }).error(function(data, status, headers, config) {
                console.log(status, headers, config);
        });
    }

记下有效负载(是的,这个示例是静态的): JSON.stringify({identifier: "apa", inputRows: []})

这在我的DTO中映射得非常好。字段是正确的,变量inputRows是一个空的初始化数组。

HOWEVER 当我查看客户端发送给API的有效负载(使用firebug或chrome检查器)时, 它看起来像这样:{"identifier":"apa","inputRows":"[]"}

您是否注意到我的JSON数组周围的""

{"identifier":"apa","inputRows":"[]"}
                                ^  ^
                                |  |
是的......这就是我遇到的问题。 当我发送该请求时,服务器只回复一个HTTP 400格式错误的语法(Tomcat / Spring错误页面),请求甚至不会在后端调用APIController。

所以,到目前为止我尝试过的(没有成功):

  • 我试过没有在有效载荷上使用JSON.stringify() 相同的结果
  • 我已经尝试在我的APIController中指定标头(没有用,它甚至不会在抛出错误之前执行该代码)
  • 我尝试在DTO中使用Java.util.List而不是数组

所以我几乎被困在这里。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

听起来你有一个冲突的prototype.js依赖性覆盖了一些函数。

我会尝试

delete Array.prototype.toJSON
在发布对象之前