2016-11-24 57 views
0

我正在使用jhipster生成的項目。這是一個微服務架構項目。轉換實體屬性駱駝案件json項目中的json中的蛇案例

在我的實體類中,屬性用camel case命名。所以當我創建一個休息服務時,它給了我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響應它將蛇情況。這是我不想改變我的實體類,但我想改變像波紋管

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

回答

6

我JSON響應你有兩種可能性:

明確的命名你的屬性:

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

或更改jackson(用於de /序列化)的工作方式:

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 
+0

謝謝你的幫助。我只在'spring:jackson:'部分的'application.yml'文件中添加了'property-naming-strategy:CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES'。現在輸出很好。但是在運行開始時我在日誌中發現了一些錯誤。這些錯誤看起來像'java.lang.NoSuchMethodException:com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder。 (com.fasterxml.jackson.databind.PropertyName,com.fasterxml.jackson.databind.AnnotationIntrospector,boolean)'你能幫我克服這個錯誤嗎? @Indivon –

+1

請注意,CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES已棄用,以支持SNAKE_CASE。 沒有這樣的方法例外可能發生,如果你有一個錯誤的版本,或者你使用例如「JsonProperty」或其他Jackson錯誤包裝的註釋。在jhipster應用程序中有com.fasterxml。*和org.springframework.cloud。*。可能是,這可能是問題... – Indivon

1

你也可以使用註釋來定義每個類的命名策略。在科特林

小例子:

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

@JsonProperty沒有爲傑克遜工作2.2。我必須重新命名我的getter方法才能使其工作。例如:

public String getName_english() { 
    return nameEnglish; 
} 

public String getName_bangla() { 
    return nameBangla; 
} 
相關問題