2016-11-11 69 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 :) –