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 に変更します」。これを試しましたが、パラメーターが評価されていません。