2017-09-01 50 views
0

我的簡化模型類門票的樣子:彈簧安置實體提交的類型轉換

private String ticketNumber; 
private String description; 
private String detailedDescription; 
private Integer status; 

我的目的是要返回給客戶端的狀態值的字符串表示。因此,響應看起來像這樣:

{ 
    ticketNumber : "T00001", 
    description : "description of a ticket", 
    detailedDescription : "description of a ticket", 
    status : "Active" 
} 

的istead:

{ 
    ticketNumber : "T00001", 
    description : "description of a ticket", 
    detailedDescription : "description of a ticket", 
    status : 2 
} 

整數和字符串之間的映射可以表示爲一個枚舉。 但問題是我不知道如何進行轉換。 的解決方案之一,可以作爲描述:http://www.baeldung.com/entity-to-and-from-dto-for-a-java-spring-application

我只需要一個字段(和公正的GET方法),不知道轉換是否有任何不是創建一個新的DTO類簡單的解決方案。

+0

您將使用TicketDto轉換器的票據。 Ticket對象表示對象,因爲它在數據庫中。 TicketDto表示客戶應該查看它的對象。您的服務將返回一張票,然後您的網絡控制器或任何端點返回該票證轉換爲TicketDto。 – Compass

+0

您可以在對象類中使用靜態地圖來存儲所有映射。然後創建一個函數,使用該映射從整數中返回字符串值。 – gonzo

回答

0

您應該使用JSON消息轉換器。 JacksonMapperGson我的偏好是GSON。如果將庫包含在類路徑中,Spring應自動添加消息轉換器。

要使用GSON,您需要註冊一個GSON bean。 創建返回它的配置類:

@Configuration 
class GsonConfig { 
    @Bean 
    Gson gson() { return new GsonBuilder().create(); } 
} 

現在春天應該使用你創建的對象轉換爲JSON的GSON對象時,在控制器的請求映射方法都被註解或@ResponseBody使用@RestController

要回答您的原始問題,您需要爲gson製作一個類型適配器,以便它知道如何轉換對象。 您將需要改變GSON方法是這樣的:

@Bean 
Gson gson() { 
    new GsonBuilder() 
     .registerTypeAdapter(Ticket.class, new JsonSerializer() { 
      public JsonElement serialize(Ticket ticket, Type type, JsonSerializationContext context) { 
       JsonObject o = new JsonObject(); 
       o.addProperty("ticketNumber", ticket.getTicketNumber()); 
       o.addProperty("description", ticket.getDescription()); 
       o.addProperty("detailedDescritpion", ticket.getDetailedDescription()); 
       String statusAsString; 
        //Covert status to string 
       o.addProperty("status", statusAsString); 
       return o; 
      } 
    }).create(); 
} 

(我沒編譯這個......對不起,任何語法錯誤和錯別字)

0

聲明你的狀態/ ID爲枚舉。

@JsonValue指示應該用於序列化整個實例的單個方法。

例如,在一個枚舉 - 我們用註釋的@JsonValue這樣的getName任何這樣的實體是通過它的名字連載:

public enum TypeEnumWithValue { 
    2("Active"), 1("Closed"); 

    private String name; 

    TypeEnumWithValue(String name) { // Constructor 
     this.name= name; 
    } 

    @JsonValue 
    public String getName() { 
     return name; 
    } 
} 

而且你的票類應該有制定者/吸氣的TypeEnumWithValue。當返回TypeEnumWithValue時,它將在響應中返回Name,而不是1,2.我沒有編譯這段代碼,但它實際上可以工作。