Dropwizard 验证@FormParam
Dropwizard Validate @FormParam
如何验证 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:
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 Bad request):
{
"errors": [
"query param title may not be null",
]
}
我试过使用 dropwizard 0.9.0 中引入的 NonEmptyStringParam
但这没有用。有什么建议吗?
编辑:
文档说明如下:"If you have an Optional field or parameter that needs validation, add the @UnwrapValidatedValue annotation on it." 和 "If you want q to evaluate to Optional.absent() in this situation, change the type to NonEmptyStringParam"。我已经试过了,但是参数没有被评估。
您希望响应以 json 形式出现。您需要在方法之上添加 produces
。
@Produces(MediaType.APPLICATION_JSON)
这应该可以解决您的问题。
如何验证 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: 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 Bad request):
{
"errors": [
"query param title may not be null",
]
}
我试过使用 dropwizard 0.9.0 中引入的 NonEmptyStringParam 但这没有用。有什么建议吗?
编辑:
文档说明如下:"If you have an Optional field or parameter that needs validation, add the @UnwrapValidatedValue annotation on it." 和 "If you want q to evaluate to Optional.absent() in this situation, change the type to NonEmptyStringParam"。我已经试过了,但是参数没有被评估。
您希望响应以 json 形式出现。您需要在方法之上添加 produces
。
@Produces(MediaType.APPLICATION_JSON)
这应该可以解决您的问题。