2016-11-11 70 views
0

我想有一個自定義對象,說MyDate將只有一個toString方法和一些構造函數,但我希望該對象接受'字符串'數據,並寫入字符串數據。使用Jackson JSON庫,是否可以將自定義對象轉換爲字符串並接收字符串?

例如,我會Java代碼:

public class MyDate { 
... 
} 

public class RootJson { 
    private MyDate myDate; 
    private String id; 
} 

And the the json would be: 
{ 
"myDate": "2015000000", 
"id": "2014000aabc" 
} 

我怎樣才能做到這一點?

+2

Jackson庫的目的是爲了執行Java <-> JSON轉換。你能否進一步解釋你正在努力完成什麼?如果你只需要接受字符串並寫入String爲什麼涉及傑克遜?請詳細說明。 – maheeka

+0

我更新了示例,如果看到myDate字段,我不想使用類定義MyDate的字符串。 –

+0

我更新了我的答案,這是否覆蓋了它? –

回答

0

根據你的評論,你是否建議你想從Jackson的字符串中序列化和反序列化MyDate?這可以通過JsonDeserilizer和JsonSerilizer完成。這裏有一個例子:

public class JsonMyDateDeserializer extends JsonDeserializer<MyDate> { 

    @Override 
    public Date deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { 

     String stringValue = jsonParser.getText(); 
     // Convert it to a MyDate how ever you want.... just example below 
     return new MyDate(stringValue) 
    } 
} 

而要做到這一點的回報(消毒指明MyDate到JSON):

public class JsonMyDateSerializer extends JsonSerializer<MyDate> { 

    @Override 
    public void serialize(MyDate myDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { 
     // Just an example.... convert your myDate something the jsonGenerator can handle 
     jsonGenerator.writeString(myDate.toString()); 

    } 
} 

,那麼你需要註釋你的根類是這樣的:

public class RootJson { 
    @JsonSerialize(using = JsonMyDateSerializer.class) 
    @JsonDeserialize(using = JsonMyDateDeserializer.class) 
    private MyDate myDate; 
    private String id; 
} 

這是否覆蓋它?

+0

這是簡單的JSON轉換。我的意思是在根級別的類定義中,我如何使用自定義對象。請參閱更新示例 –

+0

您的更新代碼看起來正確,謝謝。不知道爲什麼這個問題被壓低了。 –

+0

那裏我upvoted :) –