【问题标题】:How to convert camel case to lower case with underscores in a REST API?如何在 REST API 中使用下划线将驼峰大小写转换为小写?
【发布时间】:2021-04-27 02:54:24
【问题描述】:

我正在使用 Quarkus 和 Microprofile OpenAPI 来映射 REST API 中的实体。 我可以通过以下方式将我的驼峰命名属性转换为带有下划线的小写:

@Schema(name = "first_name")
private String firstName;

但这很不方便,因为我必须在整个项目的任何地方都这样做。

问题:有没有办法自动为所有属性执行此操作,而无需在注释中指定映射?

我浏览了 Quarkus 和 Microprofile 的文档,但没有找到如何实现。

【问题讨论】:

    标签: java openapi quarkus microprofile


    【解决方案1】:

    如果您想将此行为设为默认行为,则必须在负责将对象序列化/反序列化为 json 的对象映射器中进行配置。 在 Quarkus 中,您可以使用 Jackson 或 JsonB 进行对象映射。

    对于 Jackson,您可以使用要设置为 SNAKE_CASEPropertyNamingStrategy 来控制字段名称的行为。要全局设置,请创建一个 ObjectMapperCustomizer,如下所示:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.PropertyNamingStrategy;
    import io.quarkus.jackson.ObjectMapperCustomizer;
    
    import javax.inject.Singleton;
    
    @Singleton
    public class ObjectMapperConfig implements ObjectMapperCustomizer {
    
        @Override
        public void customize(ObjectMapper objectMapper) {
             objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
        }
    }
    

    您可以控制序列化的更多方面,例如在反序列化、日期格式化等过程中忽略未知的 props。

    你需要有一个部门到quarkus-resteasy-jackson:

    <dependency>
       <groupId>io.quarkus</groupId>
       <artifactId>quarkus-resteasy-jackson</artifactId>
    </dependency>
    

    如果你想使用 JsonB (quarkus-resteasy-jsonb) 那么你可以试试下面的JsonbConfigCustomizer

    import io.quarkus.jsonb.JsonbConfigCustomizer;
    
    import javax.inject.Singleton;
    import javax.json.bind.JsonbConfig;
    import javax.json.bind.config.PropertyNamingStrategy;
    @Singleton
    public class JsonBCustomizer implements JsonbConfigCustomizer {
    
        public void customize(JsonbConfig config) {
            config.withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_UNDERSCORES);
        }
    }
    

    【讨论】:

      【解决方案2】:

      我在 openapi 文档中找到了这个:

      您可以通过设置来控制 Schema 属性名称的转储方式 micronaut.openapi.property.naming.strategy 系统属性。它 接受以下杰克逊的 PropertyNamingStrategy 之一:- SNAKE_CASE, - UPPER_CAMEL_CASE, - LOWER_CAMEL_CASE, - LOWER_CASE 和 - KEBAB_CASE。

      更多详情请参阅Hibernate 5 Naming Strategy Configurationbaeldung

      【讨论】:

      • 这与 ORM 无关。它是关于将类字段映射到 josn 属性。
      • 我在 openapi 文档中找到了这一点:您可以通过设置 micronaut.openapi.property.naming.strategy 系统属性来控制模式属性名称的转储方式。它接受以下杰克逊的 PropertyNamingStrategy 之一:- SNAKE_CASE、- UPPER_CAMEL_CASE、- LOWER_CAMEL_CASE、 - LOWER_CASE 和 - KEBAB_CASE。
      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 2010-12-03
      • 2018-12-18
      • 2020-01-08
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多