嗨,SO。
我有一个奇怪的问题,我整天都在努力解决。
我有我的 Angular JS 模块(应用程序)和一个控制器。在那个控制器中,我注入了一个工厂,它处理我的 $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
是一个空的、已初始化的数组。
但是,当我查看客户端发送到 API 的有效负载(使用 firebug 或 chrome 检查器)时,它看起来像这样:{"identifier":"apa","inputRows":"[]"}
你注意到""
我的 JSON 数组了吗?
{"identifier":"apa","inputRows":"[]"}
^ ^
| |
是的...这就是我遇到的问题。当我发送该请求时,服务器只是回复HTTP 400
格式错误的语法(Tomcat/Spring 错误页面),该请求甚至不会调用后端的 APIController。
所以,到目前为止我尝试过的(没有成功):
- 我试过不使用
JSON.stringify()
有效载荷,结果相同 - 我尝试在我的 APIController 中指定标头(没用,它甚至在抛出错误之前都没有执行该代码)
- 我尝试
Java.util.List
在 DTO 中使用 a 而不是数组
所以我几乎被困在这里。任何帮助,将不胜感激。