2

こんにちは。

私は一日中苦労してきた奇妙な問題を抱えています。

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.ListDTO で配列の代わりにa を使用してみました

だから私はここでかなり立ち往生しています。どんな助けでも大歓迎です。

4

1 に答える 1

2

一部の機能をオーバーライドする競合するprototype.js依存関係があるようです。

私は試してみます

delete Array.prototype.toJSON

オブジェクトを投稿する前に。

于 2013-09-11T13:04:08.190 に答える