在JHipster项目中将实体属性驼峰命名法转换为蛇形命名法的JSON。

9

我正在处理一个由jhipster生成的微服务架构项目。

在我的实体类中,属性使用驼峰命名法。因此,当我创建REST服务时,它会给我提供一个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"
}
2个回答

22

你有两种可能性:

显式命名你的属性:

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

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

Jackson有一个名为PropertyNamingStrategy.SNAKE_CASE的设置,你可以为jackson对象映射器设置它。

所以,你需要为此配置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

谢谢您的帮助。我刚刚在application.yml文件的spring:jackson:部分中添加了property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES。现在输出正常了。但是我发现在运行开始时日志中出现了一些错误。这些错误看起来像是java.lang.NoSuchMethodException: com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.<init>(com.fasterxml.jackson.databind.PropertyName, com.fasterxml.jackson.databind.AnnotationIntrospector, boolean),您能帮我解决这个错误吗?@Indivon - Md. Shougat Hossain
1
请注意,CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES已被弃用,建议使用SNAKE_CASE。如果您使用了错误的版本或从错误的包中使用了“JsonProperty”或其他Jackson注释,则可能会出现“no such method exception”的异常。在jhipster应用程序中有com.fasterxml.*和org.springframework.cloud.*两个包,请确保使用正确的包,以避免此问题的发生... - Indivon

11

同时,您可以使用注解来为每个类定义命名策略。

以下是 Kotlin 的一个小例子:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接