【问题标题】:Dropwizard Validate @FormParamDropwizard 验证@FormParam
【发布时间】:2016-07-13 10:14:47
【问题描述】:

对于 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) {

发送不带标题参数的 POST 请求会产生此服务器错误:

!org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 未找到媒体类型 = 文本/html、类型 = 类的 MessageBodyWriter io.dropwizard.jersey.validation.ValidationErrorMessage, genericType=类 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 Bad request)的信息:

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

我尝试过使用 dropwizard 0.9.0 中引入的 NonEmptyStringParam 但这没有用。有什么建议吗?

编辑:

文档声明如下:“如果您有需要验证的可选字段或参数,请在其上添加 @UnwrapValidatedValue 注释。”和“如果您希望 q 在这种情况下评估为 Optional.absent(),请将类型更改为 NonEmptyStringParam”。我已经尝试过了,但没有对参数进行评估。

【问题讨论】:

    标签: validation jersey dropwizard javax.ws.rs


    【解决方案1】:

    您希望响应以 json 形式出现。您需要在方法顶部添加produces

    @Produces(MediaType.APPLICATION_JSON) 
    

    这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多