2

クラスがありますDbRecord

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

4

2 に答える 2

4

すべての JSON フィールド名がアンダースコア付きの小文字である場合、そのように fieldNamingPolicy を定義できます。

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


@JsonField
List<OnDutyElement> onDuties;

@JsonField
DateTime dateTime;

まだ行っていない場合は、DateTime の TypeConverter も必要です。LoganSquare では、JsonField アノテーションで TypeConverter をそのように定義できるようになりました。

 @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"));
}

}

于 2016-02-05T13:02:50.703 に答える