2016-07-13 5 views
0

POST要求に対して@FormParamsが空ではないことをどのように検証するのですか? バージョン0.9.3のDropwizardを使用しています。Dropwizard Validate @FormParam

@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) { 

このサーバーエラータイトルのparam利回りなしでPOSTリクエストを送信:

!org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=text/html, type=class io.dropwizard.jersey.validation.ValidationErrorMessage, genericType=class io.dropwizard.jersey.validation.ValidationErrorMessage.

、クライアントが受け取り:

<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不正なリクエスト)のようなものを受信したい :

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

私はNonEmptyStringParamを使用して試したがdropwizard 0.9.0 で導入されたが、それは動作しませんでした。助言がありますか?

EDIT:

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

答えて

1

応答がjson形式になるようにします。あなたのメソッドの上にproducesを追加する必要があります。

@Produces(MediaType.APPLICATION_JSON) 

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

+0

ああ、愚かな私!本当にありがとう! – Snuggles