当前位置: 首页 > 知识库问答 >
问题:

Jackson春靴球衣

宗政卓
2023-03-14

如spring boot博客所述

我尝试自定义我的对象序列化。

在我的配置中添加了一个新的配置bean之后

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();

    builder.propertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
    return builder;
}

当我尝试输出类用户的实例时,json结果不在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES中

Class User {
    private String firstName = "Joe Blow";

    public String getFirstName() {
        return firstName;
    }
}
{
  "firstName": "Joe Blow"
}
{
  "first_name": "Joe Blow"
}

也许我需要在我的Jersey配置中注册一些东西来激活我的自定义obejctMapper配置

@Configuration
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("my.package);
    }
}

谢谢

共有1个答案

沈淇
2023-03-14

为JAX-RS/Jersey应用程序配置ObjectMapper的一般方法是使用ContextResolver。例如:

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(
            PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
        );
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }
}

如果它不在包范围内,则应该在包扫描中拾取它,或者您可以显式注册它

public JerseyConfig() {
    register(new ObjectMapperContextResolver());
    // Or if there's is an injection required
    // register it as a .class instead of instance
}

在封送和反封送过程中调用ContextResolver。被序列化或反序列化为的类/类型将传递给GetContext方法。因此您甚至可以为不同的类型或更多的用例使用多个映射器。

// in your `@Configuration` file.
@Bean
public ObjectMapper mapper() {}
 类似资料:
  • 我想在我的Junit5单元测试中将值注入到带有@Value注释的私有字段。 我引用了这个,并使用了ReflectionTestUtils。setField通过注入值解决了我的问题,但在验证方法被调用的次数时失败。 MyClass(我的类别): 测试类: 运行上述测试时出错 我想kafkaTemplate.sendMessage();被调用一次,但被调用两次后添加反射TestUtils。 需要关于如

  • 我想在我的spring boot项目中使用Kafka Streams实时处理。所以我需要Kafka Streams配置,或者我想使用KStreams或KTable,但我在互联网上找不到示例。 我做了制作人和消费者现在我想流实时。

  • 我有一个Spring Boot2.25.1应用程序,它使用Camel 2.25.1与camel-kafka,一切都正常工作…在我的Kafka消费者中,我需要添加该功能以按需暂停消费,因此我升级到camel 3.18.1,以便我可以使用可暂停功能。升级到3.18.1后,我收到错误FileNotes与类文件TimeoutAwareAggregationStategy.class. 当我打开camel-

  • 我使用Spring的引导2.6.3和我试图使用thymeleaf最近得到一个与html的确认消息后,我通过邮件确认我的帐户(我只是使用确认邮件来验证新帐户),所以我看了一些关于thymeleaf的视频,我标记所有的视频都有一个名为模板的文件夹和静态在src/main/ressource和我没有他们,所以我创建了一个名为模板的文件夹,在文件夹中我创建了一个html文件只是为了尝试它,如果它(html

  • 问题内容: 我目前正在尝试使用Jersey 创建一个,但无法让Jersey接它。 除了在实现中使用批注之外,我找不到任何实际用法示例,甚至找不到如何使用它。看似写在泽西岛上的人在某些帖子中暗示这足以使它被拾起。 我需要指定一些SPI服务文件,还是将其添加到某个工厂的某个地方? 注意:我正在Glassfish 3.1中运行,并使用Spring 3.1。Spring可能会以某种方式接管s 的自动加载似

  • 我是Spring boot和tomcat的初学者,我发现了这个问题: 在tomcat服务器上部署Spring Bootwar文件时,如果要添加静态索引,就会出现问题。html与它并肩作战。 为了使它能够部署为war,我在我的应用程序类中添加了以下内容: 现在应用程序工作,但index.html(它位于src/main/资源下)将不显示(IM获得Whitelabel错误页与有一个意外的错误(type