2016-07-13 82 views
0

如何驗證POST請求的@FormParams是否爲空? 我們使用Dropwizard 0.9.3版本。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> 

以前我用的@NotEmpty和@QueryParam這工作得很好。 我希望客戶收到類似的信息(400錯誤請求):

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

我使用NonEmptyStringParam在dropwizard 0.9.0 介紹,但沒有奏效嘗試。有什麼建議麼?

編輯:

文檔出現如下提示:「如果你有一個需要驗證的可選字段或參數,加上它的@UnwrapValidatedValue註解。」和「如果你想在這種情況下評估爲Optional.absent(),請將類型更改爲NonEmptyStringParam」。我試過這個,但參數不是被評估的。

回答

1

您希望響應以json形式出現。您需要在方法上添加produces

@Produces(MediaType.APPLICATION_JSON) 

這應該可以解決您的問題。

+0

哦,傻我!謝謝一堆! – Snuggles