2015-12-21 41 views
2

包括字段名我有一個類DbRecordLoganSquare不上生成的Json

public class DbRecord { 


    @JsonField(name="on_duties") 
    List<OnDutyElement> onDuties; 

    @JsonField(name = "date_time") 
    DateTime dateTime; 

當我試圖序列這個類的一個對象時,LoganSquare不包括DateTime字段。

生成JSON:{:"2015-12-21T11:32:17.503-05:00","on_duties":[{...everything normal from here

+0

這看起來更像LoganSquare中的一個bug,然後在你身上碼。你應該在github上提交bugreport。 – Aegis

回答

3

也許,有一個bug。 編寫自己的TypeConverter,擴展DateTypeConverter,覆蓋serialize()方法明確通過writeFieldName與值true

這將強制類型轉換器寫入字段名稱給寫入器。

+1

我在'TypeConverter'中使用'jsonGenerator.writeString'而不是'jsonGenerator.writeStringField'。 – giannisf

4

如果所有JSON字段名都帶有下劃線的小寫字母,您可以像這樣定義fieldNamingPolicy。

@JsonObject(fieldNamingPolicy = JsonObject.FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
public class DbRecord { 


@JsonField 
List<OnDutyElement> onDuties; 

@JsonField 
DateTime dateTime; 

你也需要有類型轉換器的日期時間,如果你沒有這樣做已經,LoganSquare允許你現在定義類型轉換器在JsonField註釋這樣

@JsonField(typeConverter = DateTimeConverter.class) 
DateTime time; 

和DateTimeConverter

public class DateTimeConverter implements TypeConverter<DateTime> { 
@Override 
public DateTime parse(JsonParser jsonParser) throws IOException { 
    String dateString = jsonParser.getValueAsString(null); 
    try { 
     DateTime dateTime = new DateTime(dateString); 
     return dateTime.changeTimeZone(TimeZone.getTimeZone("UTC"), TimeZone.getDefault()); 
    } catch (RuntimeException runtimeException) { 
     runtimeException.printStackTrace(); 
     return null; 
    } 
} 

@Override 
public void serialize(DateTime object, String fieldName, boolean writeFieldNameForObject, JsonGenerator jsonGenerator) throws IOException { 
    jsonGenerator.writeStringField(fieldName, object.format("YYYY-MM-DDThh:mm:ss")); 
} 

}