使用 JAX-RS 进行 Bean 验证(rest-easy):无法识别参数名称

2023-11-27

我将 JAX-RS 资源与 Bean 验证一起使用,并按预期在这两个工作之间进行集成。

但是,在验证错误报告参数名称为 arg0 的情况下生成的默认错误消息,如下所示

[PARAMETER]
[login.arg0.password]
[password is required]
[]

对应的方法定义:

@POST //and other JAX-RS annotations
public Response login(
        @NotNull
        @Valid
        LoginBody loginBody) {

   [...]

protected static class LoginBody {

    @NotNull(message =  EMAIL_REQUIRED)
    public String email;

    @NotNull(message = PASSWORD_REQUIRED)
    public String password;
}

虽然我通常对这种消息模式感到满意,但实际上令人烦恼的是原始参数名称无法识别,即。 e.我更想看看

login.登录正文.password 代替arg0.

有没有一种简单的方法可以解决这个问题,例如。 G。以某种方式为该参数提供一个明确的名称?

我使用的是WildFly Swarm 2017.6.0。据我所知,这意味着我有resteasy + Resteasy-validator + hibernate-validator

Thanks.


您可以尝试使用以下命令编译您的应用程序-parameters或指示您的 IDE 执行此操作,例如的情况下 eclipse:首选项 -> java -> 编译器 ->“存储有关方法参数的信息(可通过反射使用)”

完成后,您需要指示 Bean Validation 基础设施(例如 hibernate-validator) 使用ReflectiveParameterNamer via META-INF/validation.xml.

<parameter-name-provider>org.hibernate.validator.parameternameprovider.ReflectionParameterNameProvider</parameter-name-provider>

也可以看看Hibernate 验证器配置

我得到了可靠的东西参数库

META-INF/validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
   xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
                    http://jboss.org/xml/ns/javax/validation/configuration
                    validation-configuration-1.1.xsd"
   version="1.1">
   <default-provider>org.hibernate.validator.HibernateValidator
   </default-provider>
   <message-interpolator>org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator
   </message-interpolator>
   <traversable-resolver>org.hibernate.validator.internal.engine.resolver.DefaultTraversableResolver
   </traversable-resolver>
   <constraint-validator-factory>org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorFactoryImpl
   </constraint-validator-factory>
   <parameter-name-provider>org.hibernate.validator.parameternameprovider.ParanamerParameterNameProvider</parameter-name-provider>
</validation-config>

To get paranamer与 Wildfly 合作我需要创建一个parameter-namerjboss模块 并从以下位置引用该模块module.xml of the hibernate-validator module.

有了这个,我就可以简单地写:

@POST
public Response login(@NotNull @Valid @Named("authRequest") AuthRequest authRequest) {
    return Response.ok().build();
}
...

public class AuthRequest {

    @NotNull(message = AuthMessages.EMAIL_REQUIRED)
    public String email;

    @NotNull(message = AuthMessages.PASSWORD_REQUIRED)
    public String password;
}

对于通过以下方式发送的请求产生以下响应curl:

curl -H "Content-Type: application/json" -H "Accept: application/json" -d '{"email":"[email protected]"}' -v http://localhost:8080/javaweb-training/resources/auth

回复:

{"exception":null,"fieldViolations":[],"propertyViolations":[],"classViolations":[],"parameterViolations":[{"constraintType":"PARAMETER","path":"login.authRequest.password","message":"password.required","value":""}],"returnValueViolations":[]}%

... 笔记login.authRequest.password而不仅仅是login.arg0.password

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JAX-RS 进行 Bean 验证(rest-easy):无法识别参数名称 的相关文章

  • Apache AVRO 与休息

    我正在评估将 Apache AVRO 用于我的 Jersey REST 服务 我将 Springboot 与 Jersey REST 结合使用 目前我接受 JSON 作为输入 并使用 Jackson 对象映射器将其转换为 Java Pojo
  • 在weblogic上升级jax-rs共享库

    通常weblogic 12c不支持jax rs 2 0 但是通过weblogic本身附带的jax rs共享库的帮助 可以将jax rs版本从1 1升级到2 0 问题是库实现是 jersey 2 5 它不能满足我的需求 我在 weblogic
  • 使用 jax-rs 发送临时文件

    我正在尝试使用 jax rs 发送一个临时文件 并在下载完成后删除该临时文件 为此 我对 InputSream 进行了子类化 以便在流关闭后收到通知 这是我到目前为止所拥有的 GET Path download fileName publi
  • 分阶段加载 spring 上下文

    这是人们会问的奇怪问题之一 为什么 所以我将从我为什么要这样做开始 然后讨论这个问题 我想更好地控制 spring 上下文的加载方式 例如 我不想同时加载域和web api 这将使资源在其依赖项准备好之前可用 也可能我需要检查某些东西的状态
  • Tomcat 是否立即支持 JAX-RS(它是否支持 JAX-RS)?

    从教材 RESTful Java with JAX RS 中我们可以读到 如果我们的应用程序服务器是 JAX RS 感知的 或者换句话说 与 JAX RS 紧密集成 则声明我们的ShoppingApplication作为 servlet 的
  • 根据请求创建 Hibernate-Session

    我刚刚启动了一个简单的 Java 测试项目 它使用 Hibernate 管理一些实体 并提供 REST 接口来操作这些对象并提供一些额外的业务逻辑 REST 接口是使用 RESTEasy 和 Jetty 创建的 到目前为止 一切工作正常 但
  • 在CXF中使用javax.ws.rs.client.ClientBuilder创建客户端,任何路由都能够使用本地传输?

    我正在开发一个使用标准的代码库 javax ws rs client ClientBuilder 类 来自 CXF 发行版 用于配置和创建 javax ws rs client Client 这已经足够好了 我现在正在尝试编写使用的测试JA
  • 如何使用 jax-rs 子资源定位器处理持久性上下文(EntityManager)?

    我在我的应用程序中使用 jax rs Restful Web 服务和子资源定位器 但是 将entityManager 传递给子资源后 我无法在此子资源中保留任何新对象 然而 entityManager 允许我查询它的数据 这是我的主要资源
  • Camel JAX-RS 和跨域请求

    我希望能够在我的本地 Camel 实例上执行 HTTP 请求 仅出于开发目的 我知道这是不好的做法 现在 我坚持 Origin http localhost 8000 is not allowed by Access Control All
  • Jersey 2 - ContainerRequestFilter get 方法注解

    我试图获取 ContainerRequestFilter 对象中的方法注释 控制器 GET RolesAllowed ADMIN public String message return Hello rest12 容器请求过滤器 Provi
  • jax-rs ContextResolver 理解

    但我试图了解 jax rs 中 Provider 的用法 但无法理解如何使用 ContextResolver 有人可以用一些基本的例子来解释这一点吗 您将看到它在解析序列化上下文对象时被大量使用 例如一个ObjectMapper用于 JSO
  • 使用 SSL 和代理设置的 Rest 客户端获取连接超时

    我正在使用带有忽略 ssl 的 Rest 客户端 它工作正常 但在将来我尝试使用客户端证书进行的生产中将无法工作 我有 ca 证书和客户端证书 我用它创建了一个客户端 但我收到错误 Exception in thread main com
  • JAX-RS 和 JAX-WS 有什么区别?

    阅读了几篇有关 JAX RS 和 JAX WS 的文章后 我有几个问题想确认一下 JAX RS可以像JAX WS一样做异步请求吗 JAX RS 能否访问不在 Java 平台上运行的 Web 服务 反之亦然 REST 对于配置文件有限的设备
  • Resteasy 将 List 转换为 LinkedHashMap

    我正在使用 Resteasy 在一些 Restful Web 服务之间发送键 值对 要发布这些对的列表 我使用此片段 List
  • 我可以在 RestEasy 中指定用于方法结果转换的 jackson @JsonView 吗?

    我正在使用基于的序列化模型 JsonView 我通常配置杰克逊ContextResolver像这样 Override public ObjectMapper getContext Class
  • Spring webflux bean 验证不起作用

    我正在尝试在 Webflux 中使用 bean 验证 这是我到目前为止所拥有的 PostMapping contact fun create RequestBody Valid contact Mono
  • Resteasy 客户端的基本身份验证

    我正在尝试使用 REST 对在我的 jboss 上运行的登录模块执行基本身份验证 我已经找到了一个 StackOverflow 主题 它解释了如何使用凭据进行身份验证 RESTEasy 客户端框架身份验证凭据 https stackover
  • javax.validation 的 @AssertTrue - 它不应该创建错误消息吗?

    我在 Spring MVC 命令 bean 中有以下代码 AssertTrue public boolean isConditionTrue return false private boolean conditionTrue 我的 JSP
  • 约束验证@Null 的要点是什么?

    我正在检查可用约束列表 http docs oracle com javaee 6 api javax validation constraints package summary html in javax validation包 我注意
  • 具有 CXF 和 Kerberos 身份验证的 Restful 服务

    尝试使用 Kerberos 身份验证保护现有 CXF JAX RS 服务时遇到困难 我浏览了似乎是参考文档的内容 http cxf apache org docs jaxrs kerberos html http cxf apache or

随机推荐