如何在RESTAPI中将驼峰式大小写转换为带下划线的小写?

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

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

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

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

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

回答

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

对于 Jackson,您可以使用要设置为 的PropertyNamingStrategy来控制字段名称的行为SNAKE_CASE。要全局设置它,请创建一个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)
    }
}

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

你需要有一个部门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);
    }
}


以上是如何在RESTAPI中将驼峰式大小写转换为带下划线的小写?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>