1

POST リクエストの @FormParams が空でないことを検証するにはどうすればよいですか? Dropwizard バージョン 0.9.3 を使用しています。

@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response addCard(@FormParam("title") @NotEmpty String title,
                        @FormParam("latitude") @NotNull Double latitude,
                        @FormParam("longitude") @NotNull Double longitude,
                        @FormParam("public") @NotNull Boolean publicCard,
                        @FormParam("user_id") @NotNull Integer userId) {

title パラメータを指定せずに POST リクエストを送信すると、次のサーバー エラーが発生します。

!org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: メディア タイプ = text/html、タイプ = クラス io.dropwizard.jersey.validation.ValidationErrorMessage、genericType = クラス io.dropwizard.jersey.validation.ValidationErrorMessage の MessageBodyWriter が見つかりません。

クライアントは以下を受け取ります。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Error 500 Request failed.</title>
</head>
<body>
    <h2>HTTP ERROR 500</h2>
    <p>Problem accessing /cards. Reason:

        <pre>    Request failed.</pre>
    </p>
    <hr>
        <i>
            <small>Powered by Jetty://</small>
        </i>
        <hr/>
    </body>
</html>

以前は @QueryParam に @NotEmpty を使用していましたが、うまくいきました。クライアントに (400 Bad request) のようなものを受け取ってもらいたい:

{
"errors": [
    "query param title may not be null",
]
}

dropwizard 0.9.0 で導入された NonEmptyStringParam を使用してみましたが、うまくいきませんでした。助言がありますか?

編集:

ドキュメントには、「検証が必要なオプションのフィールドまたはパラメーターがある場合は、 @UnwrapValidatedValue アノテーションを追加してください。」および「この状況で q を Optional.absent() に評価する場合は、型を NonEmptyStringParam に変更します」。これを試しましたが、パラメーターが評価されていません。

4

1 に答える 1

2

応答を json 形式で取得する必要があります。producesメソッドの上に追加する必要があります。

@Produces(MediaType.APPLICATION_JSON) 

これで問題が解決するはずです。

于 2016-07-14T15:34:22.783 に答える