0

Playのコントローラークラスでjsonを使用したとき!フレームワーク、私は私が理由がわからなかった何かを経験しました。

2つのajax呼び出しがあったので、コントローラークラスには次のような2つの対応するメソッドがありました。

@BodyParser.Of(BodyParser.Json.class)
public static Result categoryAdder() {
    ....(using json)....
}

それで、

@BodyParser.Of(BodyParser.Json.class)
public static Result pathCalculator() {
    MultipartFormData body = request().body().asMultipartFormData();
    FilePart filePart = body.getFile("imageFile");
    ObjectNode jsonResult = Json.newObject();
    ....
}

jqueryのプラグインであるajaxFormを使用して、ファイルをmultipartFormDataとして渡しました。@BodyParser.Of(BodyParser.Json.class)メソッドの前に置くpathCalculator()と、このメソッドはにnullポインター例外をスローしましたFilePart filePart = body.getFile("imageFile");。これは、リクエストにファイルが含まれていないことを意味します。@BodyParser.Of(BodyParser.Json.class)ただし、メソッドから削除するpathCalculator()と、うまく機能しました。@BodyParser.Of(BodyParser.Json.class)必要ですか?どうしてか分かりません。奇妙なことは、メソッドが前に配置されcategoryAdder()ている間にうまく機能することです。@BodyParser.Of(BodyParser.Json.class)

この状況が発生する理由を知っている人はいますか?

4

1 に答える 1

1

を使用すると、HTTPリクエスト本文のよう@BodyParser.Of(BodyParser.Json.class)にを検証するContent-Typeようにplayに指示します。application/json

リクエストの本文でJSONを渡し、そのような本文パーサーを使用すると、コンテンツが検証され、無効な場合は適切なHTTPエラーがスローされます。最初のケースcategoryAdderでは、メソッド内でJSONを使用/解析しているため、それは理にかなっており、完全に正しいです(検証を追加します)。

2番目のケース(pathCalculator)では、リクエストの本文にJSONがないため、Content-Typeismultipart/form-dataとJSONの本文パーサーは必要ありません。

ボディパーサーを削除するだけで機能し、それを実行する必要があります。

Content-TypejQueryajaxリクエストで設定されます。

参照:http ://www.playframework.org/documentation/2.0.4/JavaBodyParsers

于 2013-01-25T11:22:30.077 に答える