java - 界面中的 JAX-RS 验证消息

标签 java jersey jax-rs bean-validation dropwizard

我有一个 dropwizard 1.0.6 应用程序。我想将所有 JAX-RS 和验证注释放在一个接口(interface)上,然后注册我的资源来实现该接口(interface),类似于:

@Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public interface UserEndpoint {
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    Response createUser(
        @FormParam("username") @NotEmpty @Email String username,
        @FormParam("password") @Size(min=4) String password);
}

以及各自的资源:

public class UserResource implements UserEndpoint {
    public Response createUser(String username, String password) {
        //my logic here
    }
}

这效果非常好,除了错误响应中的验证消息,这些消息已变为:

createUser.arg0 不是格式正确的电子邮件地址

虽然我希望他们是:

表单字段用户名不是格式正确的电子邮件地址

更新:

如果我将 JAX-RS 和验证注释直接添加到 UserResource,那么验证消息就是我所期望的:它报告 @FormParam 中指定的参数名称 注释。这就是我想要实现的目标,但是在界面中有注释。

最佳答案

注释不会被继承,除非它们用 @Inherited 注释。 。 根据 Java Language Specification

Annotation inheritance only works on classes (not methods, interfaces, or constructors)

因此,是否要检查父类/接口(interface)的注释取决于想要使用注释的代码。

换句话说,您需要为 Dropwizard 做出贡献,使其能够从父类/接口(interface)中搜索注释

关于java - 界面中的 JAX-RS 验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42245610/

相关文章:

rest - 如何使用JAX-RS进行身份验证

java - 如何使用 jax rs 将 json 对象传递给 java Rest Web 服务

java - 如何使用 MUnit 在 Mule Flow 中模拟 Java 组件

java - 我可以得到 Spring 的 <context :property-placeholder/> to tell me what classpaths it's looking in?

java - Jersey - 使用 Jackson 生成 JSON 字符串

java - JAX-RS (Resteasy 3.5.0.Final) + Wildfly 12 + Java 9 + maven = 404 未找到,但 JAX-RS (Resteasy 3.5.0.Final) + Wildfly 12 + Java 8 + maven 有效

java - Jersey /JAX-RS : How to cascade beans-validation recursively with @Valid automatically?

java - Spring/Hibernate 是否适合需要异构数据库连接的用例?

java - 轴客户端 stub 超时问题

java - 我应该在哪里关闭我的 activemq 连接(java,jersey)