【问题标题】:Convert entity property camel case to snake case in json in jhipster project在 jhipster 项目中将实体属性骆驼案例转换为 json 中的蛇案例
【发布时间】: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"
}

【问题讨论】:

    标签: java json spring-boot jhipster


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 2019-10-30
      • 1970-01-01
      • 2016-01-16
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多