こんにちは。
私は一日中苦労してきた奇妙な問題を抱えています。
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();
}
}
これは、JAVA POJO/DTO にマップされる JSON を送信する関数です。
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 を使用してみました
だから私はここでかなり立ち往生しています。どんな助けでも大歓迎です。