当前位置: 首页 > 面试题库 >

JBoss resteasy-定制Jackson提供商

慕和惬
2023-03-14
问题内容

我在我的Spring启动应用程序中使用JBoss
resteasy。如下配置了我的自定义JasonProvider并使用com.fasterxml.jackson。

    @Provider
    @Priority(value=1)
    @Consumes({ "application/*+json", "text/json" })
    @Produces({ "application/*+json", "text/json" })
    public class JsonProvider extends JacksonJsonProvider {

      public static final PeriodFormatter STANDARD_ISO_PERIOD_FORMAT = ISOPeriodFormat.standard();

        public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().configure(WRITE_DATES_AS_TIMESTAMPS, false).configure(FAIL_ON_UNKNOWN_PROPERTIES, false)
                    .setDateFormat(ISO8601_WITH_MILLIS);

    static {
            final SimpleModule module = new SimpleModule("JsonProviderModule", new Version(1, 0, 0, null, null, null));
            module.addSerializer(Date.class, new DateSerializer());
            module.addDeserializer(Date.class, new DateDeserializer());

            OBJECT_MAPPER.registerModule(module);
        }

   public JsonProvider() {
        super(OBJECT_MAPPER);
    }
}

在我的客户代码

    final Client client = factory.getClient();
    client.register(jsonProvider);

虽然jsonProvider已注册,但是当我打电话时,它没有调用我的jsonProvider。

引起原因:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段......
com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:26)〜[jackson-
com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1583)的com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1583)〜com的[jackson-
databind-2.8.9.jar:2.8.9]。
fastxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:964)〜[jackson-
databind-2.8.9.jar:2.8.9] at
org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider
.java:134)〜[resteasy-jackson2-provider-3.1.4.Final.jar:3.1.4.Final] at
org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:66)
〜[resteasy-jaxrs-3.1.4.Final.jar:3.1.4。最终] at
org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:56)〜[resteasy-
jaxrs-3.1.4.Final.jar:3.1.4.Final] at org.jboss。
resteasy.client.jaxrs.internal.ClientResponse.readFrom(ClientResponse.java:266)〜[resteasy-
client-3.1.4.Final.jar:3.1.4.Final] …省略了29个常见框架

它曾经与resteasy 3.0.14.Final版本一起正常工作。

我最近升级到3.1.4.Final,还有其他几个Jar。不知道为什么不采用最新版本的定制JsonProvider。

还有其他注册方式吗?

相关pom整体,

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson2-provider</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

<dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-validator-provider-11</artifactId>
            <version>3.1.4.Final</version>
        </dependency>

是否还有其他Pom冲突需要验证…

谢谢


问题答案:

添加“ application / json”以及其他注释解决了该问题。

@Provider
@Consumes({ "application/json","application/*+json", "text/json" })
@Produces({ "application/json","application/*+json", "text/json" })
public class JsonProvider extends JacksonJsonProvider {

Spring根据比赛和权重确定优先级。由于默认JsonProvider在版本3.1.0中添加了注释“ application /
json”,因此默认提供程序具有优先权,因此向自定义JsonProvider添加“ application / json”解决了该问题。



 类似资料:
  • 我已经构建了一个自定义凭据提供程序,它在Windows SDK中作为示例提供。它在计算机上工作得很好。 当CR安装在远程服务器上,人们通过RDP连接到它时,会两次提示用户输入用户名/密码对,第一次是在本机RDP客户端中,第二次是在自定义凭据提供程序本身中,当用户通过本机RDP客户端成功登录时。 有没有办法获取第一步输入的用户名和密码,并将其写入CR字段。

  • 我正在阅读Symfony通过自定义用户提供商管理用户的方法:https://symfony.com/doc/current/security/custom_provider.html 当用户提交用户名和密码时,身份验证层要求配置的用户提供程序返回给定用户名的用户对象。Symfony然后检查此用户的密码是否正确,并生成安全令牌 当我们在本地使用用户/密码连接到数据库时,这非常有效,但是我想对另一个服

  • 问题内容: 我有以下三个应用程序: 项目1举行 业务逻辑(Spring Cloud功能) 接口 IDemoEntity 项目二 AWS特定的处理程序 IDemoEntity的 一种实现,具有DynamoDB特定的注释 该项目基于Spring Boot 项目3 IDemoEntity的 一种实现,带有CosmosDB批注 Azure特定的处理程序 项目1的类如下所示: 对于项目2,IDemoEnti

  • 我的目标是使用凭据进行两步身份验证。第一步是检查具有主体的用户是否在特殊数据库表中具有角色。其次是执行标准ldap身份验证。 我需要的是同时执行这两项检查,但身份验证提供程序的常见方法是在任何身份验证提供程序首次成功后声明身份验证成功。因此,我决定创建一个自定义的 AuthenticationProvider 实现,它调用 LdapAuthenticationProvider,然后执行数据库检查逻

  • 我想在汇流提供的连接器上进行一些定制。有人能指导我怎么做吗?在我的用例中,我使用的是Http接收器连接器(https://www.confluent.io/hub/confluentinc/kafka-connect-http). 我找不到相同的git代码。

  • 我有以下三个申请: 项目1有效 业务逻辑(Spring Cloud函数) 接口IDemoEntity null null 对于项目3,IDemoEntity的实现看起来与DynamoDemoEntity类似,但带有CosmosDB注释。 结构看起来可能有点复杂,但其思想如下: 一次实现业务逻辑和数据模型(在项目1中)(利用Spring Cloud功能) 只为每个平台实现一个包装器项目(我从proj