2017-08-24 51 views
-1

對象的值我有以下JSON地圖JSON原始的在Java

{ 
    id: 1234, 
    code: "N/A" 
} 

我想改變它這些類的反對:

class MySweetObject { 
    int id; 
    SomeStringWrapper code; 
} 

class SomeStringWrapper { 
    String code; 

    Boolean isNotAvailable() { 
    return "N/A".equals(code); 
    } 
} 

總之 - 我想包裝簡單的屬性對象中的JSON的值來添加一些業務功能。空值不是一個選項,因爲code是必需屬性。

在傑克遜能做到嗎?

+0

在構造函數初始化呢? – Ravi

回答

1

你可以使用JsonSetter標註在setCode方法:

從文檔:

二傳手意味着當 JSON內容中遇到相匹配的名稱的屬性,這個方法會被用於設置物業

這樣,您就可以檢查是否值null設置前,如果是01的值然後設置一個默認值(或做任何你想要的)。

+0

謝謝隊友!作品! –

+0

歡迎您!我很高興能夠提供幫助。 – amicoderozer

+0

如果在JSON數據中根本沒有屬性「代碼」,這將不起作用。來自官方文檔:'Setter意味着當在JSON內容中遇到名稱匹配的屬性時,將使用此方法來設置屬性的值。' –

-1

試試下面的代碼:

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.sun.javafx.fxml.PropertyNotFoundException; 

class Main { 

    public static void main(String[] args) throws Exception { 
     String jsonString = "{\"id\":\"1234\"}"; 
     ObjectMapper mapper = new ObjectMapper(); 
     MySweetObject obj = mapper.readValue(jsonString, MySweetObject.class); 
     System.out.println(mapper.writeValueAsString(obj)); 
    } 
} 

class MySweetObject { 

    private String id; 
    private String code; 

    public String getId() { 
     return id; 
    } 

    public String getCode() { 
     if (code == null) { 
      throw new PropertyNotFoundException("Property code cannot be null"); 
     } else { 
      return code; 
     } 
    } 
} 

通常@JsonProperty(required = true)會拋出異常,但它不能正常工作,而不是你可以手動扔在吸氣異常,如果屬性爲null或空。檢查我的代碼上面,它會拋出JsonMappingException如果爲空。

+0

我提到'代碼'的值是必需的,永遠不能爲空 –

+0

這就是代碼的行爲,'代碼'不能爲空..... –

+0

這個問題的主要目的是爲特定值添加額外的邏輯比如''N/A「'內包裝值。而不是檢查'code'是否爲空。這不是問題 –

-1

你需要修改你的JSON字符串,它的錯誤依據你的類。由於值「N/A」傑克遜將假設爲string,但這是SomeStringWrapper類的實例。

你的JSON看起來應該如下,以反序列化到您的類結構:

{ 
    id: 1234, 
    code: { 
    code : "N/A" 
    } 
} 
+0

我意識到這一點。我想要實現的是讓傑克遜把這個確切的屬性映射到包裝字符串的'code'屬性 –