在 jhipster 项目中将实体属性骆驼案例转换为 json 中的蛇案例

Posted

技术标签:

【中文标题】在 jhipster 项目中将实体属性骆驼案例转换为 json 中的蛇案例【英文标题】:Convert entity property camel case to snake case in json in jhipster project 【发布时间】:2017-04-08 12:55:01 【问题描述】:

我正在处理一个使用 jhipster 生成的项目。这是一个微服务架构项目。

在我的实体类中,属性以驼峰命名。因此,当我创建一个休息服务时,它给了我 json,其中 json 属性名称与实体属性相同。

实体类

@Entity
@Table(name = "ebook")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "ebook")
public class Ebook implements Serializable 

    private Long id;
    private String nameBangla;
    private String nameEnglish;

Json 响应


   "id": 0,
   "nameBangla": "string",
   "nameEnglish": "string"

我希望我的实体属性为驼峰式,但在 json 响应中它将蛇形。那就是我不想改变我的实体类,但我想改变我的 json 响应,如下所示


   "id": 0,
   "name_bangla": "string",
   "name_english": "string"

【问题讨论】:

【参考方案1】:

你有两种可能:

明确命名您的属性:

@JsonProperty("name_bangla")
private String nameBangla;
@JsonProperty("name_english")
private String nameEnglish;

或更改 jackson(用于反序列化)的工作方式:

Jackson 有一个名为 PropertyNamingStrategy.SNAKE_CASE 的设置 您可以为杰克逊对象映射器设置。

因此,您需要为此配置 Jackson,例如通过添加您自己的对象映射器:

@Configuration
public class JacksonConfiguration 

    @Bean
    public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() 
        return new Jackson2ObjectMapperBuilder().propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
    
 

据我所知,在旧版本的JHipster中,已经有一个JacksonConfiguration来配置JSR310时间模块,但后来被移除了……

将此添加到您的 application.yml 也应该可以:

spring.jackson.property-naming-strategy=SNAKE_CASE

【讨论】:

感谢您的帮助。我只是将property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 添加到我的application.yml 文件的spring:jackson: 部分。现在输出很好。但是我在运行开始时的日志中发现了一些错误。错误看起来像java.lang.NoSuchMethodException: com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.<init>(com.fasterxml.jackson.databind.PropertyName, com.fasterxml.jackson.databind.AnnotationIntrospector, boolean) 你能帮我克服这个错误吗? @Indivon 请注意,CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 已弃用,取而代之的是 SNAKE_CASE。如果您的版本错误,或者您使用例如来自错误包的“JsonProperty”或其他 Jackson-Annotations。 jhipster 应用中有 com.fasterxml.* 和 org.springframework.cloud.* 。可能,这可能是问题所在......【参考方案2】:

您也可以使用注解来定义每个类的命名策略。

Kotlin 中的小例子:

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
data class Specialization(val altUrl: String, val altId: Int, val altName: String)

【讨论】:

以上是关于在 jhipster 项目中将实体属性骆驼案例转换为 json 中的蛇案例的主要内容,如果未能解决你的问题,请参考以下文章

在ruby中将骆驼大小写转换为下划线大小写

ASP.NET Core 3.0 System.Text.Json骆驼案例序列化

spring-boot骆驼案例嵌套属性作为环境变量

在 CoreData 实体中将属性从 NSNumber 转换为 NSString - LightWeightMigration

雄辩的模型属性作为骆驼案例 [Laravel 5.2] [Dingo API]

在 jhipster 中将 http 重定向到 https