2015-01-16 66 views
0

我需要顯示以下種類的休息服務JSON響應的輸出顯示的地圖名稱:序列化映射到JSON,而無需使用傑克遜

{ 
    "Server up": false, 
    "database running": true, 
    "dependency 1 up": true 
} 

爲此,我已經定義了Java對象HealthCheckResponse。有一個地圖字段的java。

public class HealthCheckResponse { 
    @JsonProperty 
    private Map<String, Boolean> statusMap; 

    public Map<String, Boolean> getStatusMap() { 
     return statusMap; 
    } 
    public void setStatusMap(Map<String, Boolean> statusMap) { 
     statusMap = statusMap; 
    }} 

但是,當我打印最終響應,然後在它的名稱的地圖字段也出現。

{ 
    "statusMap": 
    { 
     "Server up": false, 
"database running": true, 
"dependency 1 up": true 
    } 
} 

請建議我需要在HealthCheckResponse.java使輸出顯示擺脫掉了「statusMap」和額外的大括號的變化。 這是我使用的對象映射:

public class CustomObjectMapper extends ObjectMapper { 

    public CustomObjectMapper() { 
     super(); 

     configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

     setVisibilityChecker(getSerializationConfig().getDefaultVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.NONE) 
.withGetterVisibility(JsonAutoDetect.Visibility.NONE).withSetterVisibility(JsonAutoDetect.Visibility.NONE) 
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE).withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)); 

     setSerializationInclusion(Include.NON_NULL); 

     registerModule(new StringModule()); 
     registerModule(new GuavaModule()); 
    } 
} 
+0

我在HealthCheckResponse中看不到任何可能的更改,因爲您希望在響應中使用鍵值對,而使用地圖以外的任何pojo結構都不可能。 –

回答

1

我相信這@JsonValue能有所幫助這裏。如果更改爲以下你的迴應:

public class HealthCheckResponse { 
    private Map<String, Boolean> statusMap; 

    @JsonValue 
    public Map<String, Boolean> getStatusMap() { 
     return statusMap; 
    } 

    public void setStatusMap(Map<String, Boolean> statusMap) { 
     this.statusMap = statusMap; 
    } 
} 

// The mapper can be used like this 
final ObjectMapper mapper = new ObjectMapper(); 

// The POJO 
final HealthCheckResponse healthCheckResponse = new HealthCheckResponse(); 
final Map<String, Boolean> statusMap = new HashMap<>(); 
statusMap.put("Server up", false); 
statusMap.put("database running", true); 
statusMap.put("dependency 1 up", true); 
healthCheckResponse.setStatusMap(statusMap); 

System.out.println(mapper.writeValueAsString(healthCheckResponse)); 

而且,輸出將是:

{ 「服務器上」:假的, 「數據庫運行」:真實的, 「依賴1起來」: true}